有沒有辦法從非託管C++創建C#對象並調用方法,但不使用COM Iterop?我正在尋找類似於JNI(但是用於.Net)的東西,您可以在其中手動創建VM,創建對象等。在不使用COM的情況下從C++調用C#方法
6
A
回答
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++代碼需要。我希望它能幫助你。
相關問題
- 1. 如何在不使用com的情況下在perl中調用C++ dll?
- 2. 如何在不通過COM的情況下從VB6調用C++ DLL?
- 3. 在c#使用內置方法不同的情況下
- 4. 如何在不引用類的情況下調用Objective C中的+類方法?
- 5. 如何在不調用方法的情況下使用變量
- 6. 在不調用__init__方法的情況下使用python類?
- 7. 在不知道簽名的情況下封裝C函數調用的方法?
- 8. 如何在不使用jquery的情況下從javascript調用.net頁面方法?
- 9. 如何在不明確調用「actionPerformed」方法的情況下調用該方法?
- 10. 如何在C#中不使用Edmx的情況下使用DbContext?
- 11. C如何在不帶參數的情況下調用函數?
- 12. 在解析的情況下,可以在C中使用什麼而不是istringstream(在C++的情況下)?
- 13. 如何在不使用$ scope的情況下使用apply()方法?
- 14. 在不創建對象的情況下調用類的方法
- 15. 從C#調用.TLB COM庫#
- 16. 調用COM對象從C#
- 17. 如何在不使用showDocument的情況下從applet調用javascript?
- 18. 在不使用系統的情況下從perl調用java類
- 19. 如何在不使用javascript的情況下從Asp.Net調用WebMethod
- 20. 在不更改代碼的情況下調用父類方法
- 21. 在不重定向的情況下調用ruby操作/方法
- 22. 如何在不調用super.onCreate的情況下重寫onCreate方法
- 23. 在不導入特定項目的情況下調用方法
- 24. 如何在不知道類名的情況下調用方法?
- 25. 在什麼情況下C++析構函數不會被調用?
- 26. 默認情況下使用調用對象的「self」的方法
- 27. 如何在不使用system()的情況下從C程序中使用「sudo」?
- 28. React.js如何在不使用引用的情況下調用子組件方法?
- 29. 如何在不調用「system()」的情況下使用C++或Qt關閉Linux?
- 30. 使用情況下對C#line指令
正則C++或託管C++? – 2008-11-10 13:01:36