2013-05-10 334 views
0

我試圖找出如何能工作:機DLL調用一個.NET的DLL

  • 我有一個.NET的DLL,說NETDll.dll,我沒有源代碼進行修改。
  • 我想使用NETDll.dll在我的C++項目,該項目將創建一個本地的dll,說NativeDll.dll

因此,這裏是我認爲問題出在哪裏(我可能是錯的tho):

  • 由於我的NativeDll.dll是本機的,因此它不能是CLR/CLI dll。本機dll沒有運行時引擎,但CLR的確。

我該怎麼做?感謝您的任何建議。

回答

1

你將不得不在.NET程序集中公開某些東西。

+0

我該怎麼做?我沒有訪問.NET DLL的源代碼 – 2013-05-10 20:58:59

+0

@NickTsui你可能不得不寫一個包裝器。 – 2013-05-10 21:53:44

+0

如何編寫包裝?我發現了一些源代碼,但它們似乎都可以訪問託管的C#代碼,這是我沒有的。 – 2013-05-12 20:47:16

1

使用C++/CLI,您的本地DLL可以是混合模式native-and.NET組件。谷歌或搜索「#pragma managed」/「#pragma unmanaged」,或查看C++/CLI上的任何書籍。基本上,假設你有Visual C++ 2010或2012年,你可以寫這樣的事情:

#pragma unmanaged 

int main() 
{ 
    CallManagedTrampoline(); 
} 

#pragma managed 

void CallManagedTrampoline() 
{ 
    TypeFromDotnetDLL t = new TypeFromDotnetDLL(); 
    t.CallSomething(); 
} 

事實上,這取決於什麼是在.NET的DLL的細節,你甚至可能不會需要把使用#pragma在CallManagedTrampoline()調用之前進行管理 - 有時您可以直接從非託管代碼進行調用。 C++/CLI是你的朋友。