用 C# 封装 Visual C++
-
08-07-2019 - |
题
我需要使用 C++ 进行一些进程注入,但我更喜欢使用 C# 来处理低级内容以外的所有内容。我听说过“函数包装”和“封送处理”,并且进行了大量的谷歌搜索,并在这里和那里找到了一些信息,但我仍然很缺乏。
我按照有用的顺序读过的东西;
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#调用它。
不隶属于 StackOverflow