Обтекание Visual C ++ в C # - PullRequest
       22

Обтекание Visual C ++ в C #

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

Мне нужно сделать какое-то внедрение процесса с использованием C ++, но я бы предпочел использовать C # для всего, кроме вещей низкого уровня. Я слышал о «обёртывании функций» и «маршалинге», провел довольно много поисков в Google и нашел кое-какую информацию тут и там, но мне всё ещё не хватает.

Вещи, которые я прочитал в порядке полезности;
http://msdn.microsoft.com/en-us/library/ms235281(VS.80).aspx
http://www.drdobbs.com/cpp/184401742
http://geeklit.blogspot.com/2006/08/calling-c-lib-from-c.html

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

Любая информация по теме высоко ценится.

Ответы [ 3 ]

5 голосов
/ 15 ноября 2008

Я думаю, что P / Invoke действительно самый простой подход:

  • Создание библиотеки DLL в неуправляемом C ++, содержащей все функции, необходимые для внедрения.
  • В вашем коде C # объявите некоторые static extern методы и используйте атрибут DllImport, чтобы указать их на вашу C ++ dll. Для получения дополнительной информации см. Ссылку, предоставленную arul в его ответ .

Обратите внимание, что P / Invoke не ограничивается "функциями Windows API" & mdash; Вы можете вызывать функции, предоставляемые любой собственной DLL.

Потенциальным недостатком P / Invoke является то, что вам придется предоставить сигнатуры для ваших функций C ++, возможно, указав некоторые менее очевидные функции сортировки. В этом случае вы можете подумать о создании COM-сервера вместо «простой» DLL и использовании COM-взаимодействия для вызова кода из C #.

2 голосов
/ 15 ноября 2008

Вы хотите использовать P / Invoke, см. MSDN Magazine .

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

Если Pinvoking - это не то, что вы хотите, то создайте управляемое приложение C ++. Используйте родной C ++ для выполнения процесса внедрения. Используйте управляемый c ++ для создания дружественного интерфейса .NET для этого нативного поведения. Это можно затем вызвать из C #.

...