2008-11-15 74 views
3

我需要使用C++进行一些进程注入,但我宁愿将C#用于除低级别内容以外的所有内容。我听说过“功能包装”和“编组”,并且做了很多谷歌搜索,并且在这里和那里发现了一些信息,但我仍然很缺乏。在C#中包装Visual 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#语言的那些功能?

关于这个主题的任何信息,我们非常感谢。

回答

5

我认为的P/Invoke是真正的最直接的方法:

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

注意的P/Invoke不限于“Windows API函数” —你可以调用任何本地DLL导出的函数。

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

+0

谢谢你的澄清。 – bdd 2008-11-15 14:08:37

2

您想使用P/Invoke,请参阅MSDN Magazine

+0

唯一的是我不想调用任何Windows API函数。我想注入第三方进程,并通过本地C函数使用asm/etc调用该进程中的某些函数,我可以从C#中调用该函数。也许我误解了这篇文章。谢谢。 – bdd 2008-11-15 12:05:21

1

如果Pinvoking不是您想要的,那么创建一个托管的C++应用程序。使用本机C++来执行进程注入。使用托管C++创建一个适用于此本机行为的.NET友好界面。这可以从C#中调用。

+0

任何指导或例子,你可以指向我?谢谢! – bdd 2008-11-15 13:24:00