包装 Visual C++ 在 C# 中
我需要使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为 P/Invoke 实际上是最直接的方法:
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:
static extern
methods, and use theDllImport
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#.
您想要使用 P/Invoke,请参阅 MSDN 杂志。
You want to use P/Invoke, see MSDN Magazine.
如果 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#.