Обертывание Visual C++ в C#
-
08-07-2019 - |
Вопрос
Мне нужно выполнить внедрение процесса с использованием 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#?
Любая информация по теме очень ценится.
Решение
Я думаю, что P/Invoke — действительно самый простой подход:
- Создайте DLL в неуправляемый C++, содержащий все функции, необходимые для внедрения.
- В вашем коде C# объявите некоторые
static extern
методы и использоватьDllImport
атрибут, чтобы указать им на вашу C++ dll.Более подробную информацию смотрите по ссылке, предоставленной арул в его ответ.
Обратите внимание, что P/Invoke не ограничивается «функциями Windows API» — вы можете вызывать функции, предоставляемые любой собственной DLL.
Потенциальным недостатком P/Invoke является то, что вам придется предоставлять сигнатуры для ваших функций C++, возможно, определяя некоторый неочевидный маршалинг.В этом случае вы можете рассмотреть возможность создания COM-сервера вместо «простой» DLL и использования COM-взаимодействие для вызова вашего кода из C#.
Другие советы
Вы хотите использовать P / Invoke, см. журнал MSDN . р>
Если Pinvoking - это не то, что вы хотите, то создайте управляемое приложение C ++. Используйте родной C ++ для выполнения процесса внедрения. Используйте управляемый c ++ для создания дружественного интерфейса .NET для этого нативного поведения. Это может быть вызвано из C #.