3

我需要使用 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# 来命令这些函数?

非常感谢有关该主题的任何信息。

4

3 回答 3

5

我认为 P/Invoke 确实是最直接的方法:

  • 在非托管C++中创建一个 DLL ,其中包含执行注入所需的所有功能。
  • 在您的 C# 代码中,声明一些static extern方法,并使用DllImport属性将它们指向您的 C++ dll。有关更多详细信息,请参阅arul其答案中提供的链接。

请注意,P/Invoke 不限于“windows API 函数”——您可以调用任何本机 DLL 公开的函数。

P/Invoke 的一个潜在缺点是您必须为您的 C++ 函数提供签名,可能会指定一些不太明显的编组。在这种情况下,您可以考虑构建 COM 服务器而不是“普通”DLL,并使用COM 互操作从 C# 调用您的代码。

于 2008-11-15T14:06:26.340 回答
2

要使用 P/Invoke,请参阅MSDN 杂志

于 2008-11-15T11:53:23.457 回答
1

如果 Pinvoking 不是您想要做的,那么创建一个托管 C++ 应用程序。使用本机 C++ 进行进程注入。使用托管 c++ 为这种本机行为创建一个 .NET 友好的接口。然后可以从 C# 调用它。

于 2008-11-15T13:21:16.103 回答