包装 Visual C++ 在 C# 中

发布于 2024-07-08 18:55:35 字数 688 浏览 7 评论 0原文

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

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

I need to do some process injection using C++ but I would prefer to use C# for everything other than the low level stuff. I have heard about "function wrapping" and "marshaling" and have done quite a bit of google searching and have found bits of information here and there but I am still really lacking.

Things I have read in order of usefulness;
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

How can I wrap all the lower level stuff (native C++) in C# so I can easily command those functions in a language I am more comfortable with, C#?

Any information on the topic is much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一枫情书 2024-07-15 18:55:35

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

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

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

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

I think P/Invoke is really the most straightforward approach:

  • Create a DLL in unmanaged C++, containing all the functionality you need to do the injection.
  • In your C# code, declare some static extern methods, and use the DllImport attribute to point them to your C++ dll. For more details, see the link provided by arul in his answer.

Note that P/Invoke isn't limited to "windows API functions" — you can call functions exposed by any native DLL.

A potential downside of P/Invoke is that you will have to provide the signatures for your C++ functions, possibly specifying some less-than-obvious marshalling. In that case, you could consider constructing a COM server instead of a "plain" DLL, and using COM interop to call your code from C#.

南巷近海 2024-07-15 18:55:35

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

You want to use P/Invoke, see MSDN Magazine.

木緿 2024-07-15 18:55:35

如果 Pinvoking 不是您想要做的,那么创建一个托管 C++ 应用程序。 使用本机 C++ 执行进程注入操作。 使用托管 C++ 创建针对此本机行为的 .NET 友好界面。 然后可以从 C# 调用它。

If Pinvoking isn't what you want to do, then create a managed C++ application. Use native C++ to do the process injection stuff. Use managed c++ to create a .NET friendly interface to this native behaviour. This can then be called from C#.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文