2008-11-10 85 views
6

有沒有辦法從非託管C++創建C#對象並調用方法,但不使用COM Iterop?我正在尋找類似於JNI(但是用於.Net)的東西,您可以在其中手動創建VM,創建對象等。在不使用COM的情況下從C++調用C#方法

+0

正則C++或託管C++? – 2008-11-10 13:01:36

回答

6

如果您使用的是C++/CLI,那麼您可以直接與受管理的世界和非託管代碼進行交互,因此interop是微不足道的。

您也可以自己託管CLR,並且託管API是基於COM的,然後可以創建任何託管對象。這個過程並不困難,因爲一些API調用封裝了很多功能。網上有很多信息,例如「Hosting the Common Language Runtime」上的MSDN文檔。

1

您可以在C++項目中決定是否使用託管C++ 。嘗試更改項目中的設置文件,以便將其編譯爲託管。把這些調用放到你的C#對象中。

跨越C++/C#邊界需要花費,所以你應該分析它在哪裏做。就像,你不想在循環中做它。

3

從.NET類/方法導出C風格的API有一些「未公開」的方式。

這最終導致.NET dll導出了可以從C/C++調用的API或任何可以使用.DLL的API。

如果你到「閱讀」(BEH),你可以得到所謂的一本書:Inside Microsoft® .NET IL Assembler在那裏你會在第15章發現了這種方法:「管理方法爲託管輸出」

還有一個很好的例子在代碼項目的項目可以作爲起點爲32位環境中使用: http://www.codeproject.com/KB/dotnet/DllExport.aspx

1

我的jni4net作者,JVM和CLR之間開源進程內橋。它建立在JNI和PInvoke之上。沒有C/C++代碼需要。我希望它能幫助你。

相關問題