Расширение приложения C ++ с помощью плагинов C # - PullRequest
1 голос
/ 30 декабря 2008

У меня есть приложение C ++ для Windows, которое можно расширить, написав плагины для C ++, используя API, предоставляемый приложением. Существует также один плагин, который переводит API C ++ в Python (например, плагины могут быть написаны на Python).

Я хочу разрешить пользователям писать плагины на C # в дополнение к C ++ и Python. Поскольку я не очень знаком с миром .NET, я не уверен, как реализовать систему плагинов C #.

Что бы вы порекомендовали использовать для такой системы плагинов (хост C ++, плагины в C #)? Чему я должен научиться, чтобы этого достичь?

Ответы [ 4 ]

3 голосов
/ 30 декабря 2008

Есть несколько предыдущих постов, которые могут вам помочь:

3 голосов
/ 30 декабря 2008

Предоставьте свой API, используя COM-объекты и интерфейсы, и вы откроете свое приложение для многих сред разработки, включая C #.

2 голосов
/ 30 декабря 2008

На самом деле, а также предложения COM. Если вы действительно хотите добавить поддержку плагинов 1-го класса .NET, можно разместить собственный процесс CLR. Здесь есть очень интересная статья.

http://msdn.microsoft.com/en-us/magazine/cc163567.aspx

1 голос
/ 30 декабря 2008

В прошлом я делал это разными способами. Я обнаружил, что C ++ / CLI был лучшим вариантом для построения моста между .Net и неуправляемым C ++ (хотя, как отмечалось другими авторами, COM в другом варианте).

Способы, которыми я занимался в прошлом, включают:

  1. Генерация кода оболочки C ++ / CLI API из моего C ++ API с использованием отражения. Конечно, нативный C ++ не имеет системы отражения, поэтому мы развернули свою собственную. Сгенерированный код C ++ / CLI был затем скомпилирован в сборку, на которую ссылается плагин C #.
  2. Генерация динамической сборки из моего C ++ API с использованием отражения (т. Е. С использованием вещи Reflection.Emit). Получившаяся сборка может быть использована в процессе для языков сценариев, или вы даже можете скомпилировать код C # против нее во время выполнения. Сборка может быть даже записана на диск для статического использования. Недостатком здесь является то, что вы, вероятно, не можете излучать лучше IL, чем компилятор, поэтому, если вам не нужна динамическая генерация, не идите по этому пути.
  3. Рукописные оболочки C ++ / CLI API. Если API не очень большой, написать обертку вручную достаточно просто.

В конце концов у вас будет сборка для плагинов C # для компиляции. Теперь вам нужно загрузить сборки плагинов во время выполнения. Для этого необходимо разместить CLR.

Размещение CLR не сложно, хотя я сделал это только один раз, и это было несколько лет назад - возможно, времена изменились. Если вам неудобно размещать CLR, то поместите как можно больше кода вашего приложения в библиотеки DLL, а затем напишите небольшое приложение на C ++ / CLI, которое отображает ваш неуправляемый пользовательский интерфейс. Теперь CLR размещается в небольшом приложении C ++ / CLI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...