2008-11-15 72 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