有沒有辦法從非託管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的情況下從VB6調用C++ DLL?
- 2. 在c#使用內置方法不同的情況下
- 3. 如何在不引用類的情況下調用Objective C中的+類方法?
- 4. 如何在不使用jquery的情況下從javascript調用.net頁面方法?
- 5. 如何在不明確調用「actionPerformed」方法的情況下調用該方法?
- 6. 如何在C#中不使用Edmx的情況下使用DbContext?
- 7. 在不調用CreateObject的情況下使用.NET 2.0 CF中的COM對象
- 8. 如何在不使用$ scope的情況下使用apply()方法?
- 9. 在不創建對象的情況下調用類的方法
- 10. 如何在不使用showDocument的情況下從applet調用javascript?
- 11. 如何在不使用javascript的情況下從Asp.Net調用WebMethod
- 12. 在不使用系統的情況下從perl調用java類
- 13. 在不更改代碼的情況下調用父類方法
- 14. 如何在不知道類名的情況下調用方法?
- 15. React.js如何在不使用引用的情況下調用子組件方法?
- 16. 在什麼情況下C++析構函數不會被調用?
- 17. 如何在不調用「system()」的情況下使用C++或Qt關閉Linux?
- 18. 使用情況下對C#line指令
- 19. C++:爲什麼「使用」在某些情況下不起作用?
- 20. 在不使用循環的情況下更新C#中的DataTable?
- 21. 從C++ com插件調用C#
- 22. 如何在不渲染頁面的情況下使用Openfaces/JSF調用方法?
- 23. 如何在不調用多個「draw()」方法的情況下使用paintComponent()?
- 24. PFQuery在不使用委託的情況下返回數據後調用方法
- 25. 在不使用Windows窗體的情況下繪製C#圖形
- 26. 只有在不使用cout的情況下C++段錯誤
- 27. 如何在不使用類名的情況下從實例方法調用類方法
- 28. C++不能調用方法(使用模板)從模板方法
- 29. 在哪種情況下,C++/c#命名空間方法比Java方法更好?
- 30. 在不等待非異步方法的情況下調用異步方法?
正則C++或託管C++? – 2008-11-10 13:01:36