我有一個C++項目和使用C#製作的DLL庫。是否有可能將它添加到C++項目並使用它的方法?我使用Visual Studio 2008如何在C++項目中使用DLL庫文件?
0
A
回答
1
3
你,我知道有兩種選擇:
1)你可以編譯COM支持C#DLL,然後通過COM從C++訪問它。這將涉及COM Interop,它可能比被管理的.NET調用慢。
要編譯COM支持的C#DLL,請轉到項目的Properties-> Application-> Assembly Information-> Make assembly COM-Visible。您使用regasm在用戶計算機上註冊DLL。這是類似於使用REGSVR32,除了regasm是.NET的DLL:
http://www.csharphelp.com/archives/archive190.html
我個人也使用與regasm的/ CODEBASE開關,我打算成爲唯一的COM使用的DLL。它仍然可以在沒有/ CODEBASE開關的情況下工作,但是DLL也會出現在全局程序集緩存中,這隻會給GAC增加混亂,並將你登錄到我不需要用於COM互操作場景的很多功能中。
您還可以在Build下設置「Register for COM-Interop」,但這不是必需的。這在重複調試時非常有用,因爲它在編譯時會在您的機器上註冊具有regasm的COM DLL。它本身並沒有什麼關係。你仍然需要在用戶的機器上重新設置DLL。
註冊後,您應該能夠添加COM引用到C#DLL,並從本地C++調用它,就像您使用其他COM組件一樣。
或者
2)你可以編譯C++項目的託管C++/CLI的項目,可以讓您引用的DLL的.NET,如C#DLL。如果C++/CLI對你來說不是問題,我認爲這將是更好的選擇。 C++/CLI代碼和C#DLL之間的調用應該比COM Interop執行得更好,但另一方面,C++/CLI本身比本地C++稍慢。
相關問題
- 1. 如何使用c dll從c#項目讀取文件?
- 2. 在C++項目中使用c DLL
- 3. 如何在C++中使用dll文件?
- 4. 在.net項目中使用SilverLight庫(dll)
- 5. 如何在vb6庫項目中引用com可見C#dll
- 6. 在c#項目中使用cpp dll
- 7. 在C#項目中使用COM dll
- 8. 如何在c#項目中使用C++ dll?
- 9. 如何在Haskell項目中使用DLL?
- 10. 如何在C#項目中添加dll
- 11. 從庫項目中的子文件夾引用dll文件
- 12. 如何在其他asp.net項目中使用C#編寫的DLL?
- 13. 在C#中使用DLL庫
- 14. 如何隱藏C#.exe項目中的所有dll文件
- 15. 如何將BPM檢測庫的.dll文件添加到我的c#項目中?
- 16. 在Swift項目中使用C++文件
- 17. 在gtkmm項目中使用c文件
- 18. C++。鏈接.dll文件到項目
- 19. 如何在Wix安裝項目中引用GAC的dll文件?
- 20. 如何在部署項目文件(dll)中調用webmethod
- 21. C#項目使用的C++ DLL調試
- 22. 如何在Java項目中使用JNI處理DLL事件?
- 23. 如何C#DLL到C++項目
- 24. 如何從C#項目調試C++ dll?
- 25. 引用qt項目中的dll文件
- 26. c#類庫項目 - 從相同的文件夾加載DLL?
- 27. 如何在iOS項目中使用dylib庫和hpp頭文件?
- 28. 如何在我的Objective-C iOS項目中使用C庫?
- 29. 在c#項目中導入C++ dll
- 30. 何處放置以及如何在C++項目中包含dll文件?
如何從COM訪問它? 我不想使用託管C++。使用託管的C++會影響性能嗎? – 2009-12-06 20:46:05
是和否。一般情況下,託管C++的性能比本地C++稍差。但在你的情況下,你正在考慮把COM調用變成一個叫做COM互操作的C#.net DLL,並且在我的經驗中,COM互操作比一個託管到管理的調用慢。我將添加關於如何將C#DLL作爲COM DLL進行編譯的信息,如果您決定這是您想要執行的操作。 – AaronLS 2009-12-06 20:57:01
非常感謝。是的,我想。所以你認爲業績在這裏不是一個大問題? – 2009-12-06 21:18:39