簡體   English   中英

在項目c ++中使用c#dll

[英]using c# dll in project c++

我想在c ++項目中使用c#(visual studio 2008)制作的dll(visual studio 2003)。 怎么做 ? 請嘿嘿

不僅僅是COM互操作, MSDN FAQ還列出了鮮為人知的方法:

2.2如何從本機Visual C ++調用.NET程序集?

基本上有四種方法可以從本機VC ++代碼調用.NET程序集。 Microsoft All-In-One代碼框架具有演示方法的工作示例。

  1. Native VC ++模塊調用CLR Hosting API來托管CLR,加載和調用.NET程序集。 (一體化代碼框架示例代碼:CppHostCLR)

  2. 如果.NET程序集可以作為COM組件公開,則本機VC ++模塊可以通過.NET - COM interop調用.NET程序集。 (All-In-One代碼框架示例代碼:CppCOMClient)

  3. 反向PInvoke:托管代碼調用本機傳遞本機代碼可以回調的委托。 (多合一代碼框架示例代碼:CSPInvokeDll)

  4. 如果允許包含本機VC ++代碼的模塊啟用CLR ,則本機VC ++代碼可以通過“It Just Works”或“IJW”機制直接調用.NET程序集。 (All-In-One代碼框架示例代碼:CppCLIWrapLib)

在將“Resolve #using References”(Project-> C / C ++ - > General)編譯器選項設置到包含所需程序集的目錄之后,然后在代碼中添加這樣的行。

#using <NiftyAssembly.dll>

您不能直接使用非托管C ++代碼中的.NET程序集。 一種可能的解決方案是使用regasm.exe實用程序將程序集公開為COM對象,然后從C ++中使用它。 請注意,需要作為COM對象公開的.NET類型可能需要使用[COMVisible(true)]屬性進行修飾,並且仍然需要在運行C ++代碼的目標計算機上安裝.NET框架。

有很多方法可以做到這一點。

C#DLL是COM DLL嗎? 如果是這樣,您可以使用常規COM API /規范在C ++程序中訪問它。 有許多關於使C#DLL COM可見的教程。 它並不困難,基本上只有一些編譯開關和C#屬性。

否則,您可以使用/ clr編譯器開關編譯C ++項目嗎? 如果是這樣,您可以使用Using Directive直接導入C#DLL。

正如達林所說,一種方式是通過COM。 另外兩種方式(我知道)是:

  • 您可以在C ++中創建混合模式DLL。 該DLL可以包含和調用托管代碼,但它也可以導出非托管函數,如普通的C ++ DLL。 它可以像任何其他C ++ DLL一樣包含在內
  • 這要困難得多,但你也可以主持CLR。 Google為“CLR托管”查找有關API或示例的詳細信息。

制作庫文件[.Tlb]文件然后我們才能使用dll。 您必須制作原始c#DLL的.TLB(類型庫文件),並在VC ++代碼中使用該.TLB庫。 為此,您必須在您的電腦上注冊.TLB文件,並且必須在您的vc ++ apllication中導入該.TLB文件。 編寫C#DLL時,請記住使用將在類中實現的接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM