我有一個我在C#中編寫的DLL,我想用C#應用程序和使用非託管VC++編寫的應用程序來使用它。這可能嗎?是否有可能在非託管VC++應用程序中使用使用C#創建的DLL?
回答
爲了補充這裏的其他答案,這裏是描述你的場景的MS支持文章。
您可以使C#程序集對COM可見,並以此方式使用它。
在C#項目屬性的「Assembly Information」按鈕下,選擇「Make COM Visible」。
有很多方法可以從Native C++訪問COM對象,最簡單/最好的方法取決於你在做什麼和如何做。
+1 - 這幾乎是它。 COM interop幾乎是這種情況下唯一明智的方式。 – TomTom 2010-05-20 12:42:06
-1,沒有評論。 。 。怎麼會這樣?如果我的答案有問題,請你讓我知道嗎?我們都在這裏學習,謝謝。 – 2010-05-20 12:45:57
感謝您的回覆,我將使用這種方法。 :) – 2010-05-20 14:09:15
有不僅僅是COM互操作越多,MSDN FAQ還列出了鮮爲人知的方法:
2.2如何調用來自本機的Visual C .NET程序集++?
基本上有四種方法可以從本地VC++ 代碼調用.NET程序集中的 。微軟All-In-One Code Framework有 演示方法的工作示例。
本地VC++模塊調用CLR Hosting APIs到主機CLR,負載和 調用.NET組件。 (多功能一個 代碼框架中的示例代碼: CppHostCLR)
如果.NET組件可以公開爲一個COM組件,天然 VC++模塊可以通過.NET調用到.NET 總成 - COM互操作。 (多功能一站式示例代碼庫示例 代碼:CppCOMClient)
反向的PInvoke:託管代碼調用本地傳遞一個委託 本地代碼可以回調。 (全多功能一體機代碼框架示例 代碼:CSPInvokeDll)
如果包含天然VC++代碼模塊被允許enable CLR,天然VC++代碼可以調用 .NET組件可直接通過「它 只是作品「或」IJW「機制。 (多功能一站式示例代碼庫示例代碼:CppCLIWrapLib)
嗯,看來我不得不再次提到我unmanaged exports。 ;-)
剛剛在2天前回答了similar question。這完全工作在C#中,它甚至爲你的C#程序集創建的.lib &文件.exp由C++消耗:
internal class Sample
{
[DllExport("_export_test", CallingConvention.Cdecl)]
static int Test(int a)
{
return a + 1;
}
}
哇!真?我假設C#需要被標記爲不安全?我沒有想到你可以做到這一點。 – 2010-05-21 12:18:14
該程序集將包含不安全的位,但在用作.Net程序集時不會被認爲是不安全的。您仍然可以將它用作普通的x86或x64(不是AnyCPU)程序集,幷包含所有類和東西。但是,如果將它作爲真正的DLL加載,它將表現得像一個一樣。這是不安全位開始的地方。 – 2010-05-21 13:56:46
- 1. 使用VS2010創建C++非託管DLL
- 2. 在非託管C++ dll中使用託管c#dll
- 3. 在c#項目中使用託管dll(它使用非託管dll)
- 4. 是否有可能在非web應用程序中使用togglz
- 5. 是否有可能在Java Applet中託管Silverlight應用程序?
- 6. 是否有可能在visual-studio-2010中使用C++創建Web應用程序?
- 7. 如何在混合應用程序中執行異常處理? (託管應用程序使用非託管DLL)
- 8. 創建一個本機和託管應用程序可以使用的DLL
- 9. 是否有可能將QT應用程序託管到WPF應用程序中?
- 10. 是否有可能在live.com上託管應用程序?
- 11. VC++和C#如何編寫託管DLL或非託管DLL?
- 12. 如何使用C#創建非託管DLL?
- 13. 從C#應用程序中的非託管DLL導入函數
- 14. SafeArrayTypeMismatchException嘗試使用非託管C++ DLL
- 15. 我可以在非託管的Delphi EXE中使用託管的C#DLL嗎?
- 16. 本地VC++ 6中的託管DLL應用程序
- 17. 非託管vC++靜態庫和C#GUI應用程序
- 18. 使用dfshim.dll控制非託管C++中的ClickOnce應用程序
- 19. C#託管的dll調用或非託管的dll調用?
- 20. 從沒有COM的非託管C++應用程序調用C#dll
- 21. 使用.NET應用程序未知/非託管的DLL的 - 獲取未知DLL
- 22. 是有可能的C++/CLI DLL使用靜態VC++的lib
- 23. 在C#中使用vC++ dll#
- 24. 從非託管C++創建COM DLL LIB
- 25. 如何在非託管C++應用程序中託管許可的.Net控件?
- 26. C#應用程序與非託管DLL凍結整個系統
- 27. 我可以使用VC++ 2008創建DLL並在VC++ 6中使用它嗎?
- 28. 如何在可能沒有託管配置提供程序的應用程序中使用託管配置?
- 29. 在WPF應用程序中加載非託管DLL
- 30. 是否有可能在C#中使用BDE創建的表格?
+1:非常棒的google-fu!這個鏈接正是馬修所需要的。 – 2010-05-20 12:44:36
@Binary Worrier - 我擔心我會踩着你的腳趾,上面的鏈接,因爲它看起來像你要編輯你的答案。 – 2010-05-20 12:49:25
榮譽夥計,最快的手指贏了:) – 2010-05-20 13:07:50