Вызов методов C # из C ++ без использования COM - PullRequest
6 голосов
/ 10 ноября 2008

Есть ли способ создания объектов C # и вызова методов из неуправляемого C ++, но без использования COM Iterop? Я ищу что-то вроде JNI (но для .Net), где вы можете вручную создать виртуальную машину, создать объекты и т. Д.

Ответы [ 4 ]

6 голосов
/ 10 ноября 2008

Если вы используете C ++ / CLI, то вы можете напрямую взаимодействовать как с управляемым миром, так и с неуправляемым кодом, поэтому взаимодействие является тривиальным.

Вы также можете разместить CLR самостоятельно, и хотя API хостинга основан на COM, вы можете создать любой управляемый объект. Процесс не сложный, так как он звучит так, как несколько вызовов API заключают в себе множество функций. В Интернете много информации, например, документация MSDN " Hosting Common Language Runtime ".

3 голосов
/ 10 ноября 2008

Существует несколько «недокументированный» способ экспорта API стиля C из класса / метода .NET.

Это в конечном итоге приводит к ситуации, когда .NET dll имеет экспортированные API, которые могут быть вызваны из C / C ++ или из всего, что может потреблять .DLL в этом отношении.

Если вы «читаете» (смотрите;), вы можете получить книгу под названием: Внутри Microsoft® .NET IL Assembler , где вы найдете эту технику в главе 15: «Управляемые методы как неуправляемые». Экспорт "

Есть также хороший пример проекта кода-проекта, который вы можете использовать в качестве отправной точки для 32-битных сред: http://www.codeproject.com/KB/dotnet/DllExport.aspx

1 голос
/ 31 октября 2009

Я являюсь автором jni4net , внутрипроцессного моста с открытым исходным кодом между JVM и CLR. Он построен на основе JNI и PInvoke. Код C / C ++ не требуется. Я надеюсь, что это поможет вам.

1 голос
/ 10 ноября 2008

Вы можете решить файл за файлом в вашем проекте C ++, использовать управляемый C ++ или нет. Попробуйте изменить настройки файла в вашем проекте, чтобы он компилировался как управляемый. Поместите вызовы в ваш объект C #.

Пересечение границы C ++ / C # стоит, поэтому вам следует проанализировать, где это сделать. Мол, ты не хотел бы делать это внутри цикла.

...