Вопрос

Мне нужно выполнить внедрение процесса с использованием 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 #.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top