2013-03-11 51 views
0

我目前有一個使用32位dll的C#項目。我想要做的是在一個C++項目中使用dll,不幸的是項目中引用的dll沒有帶有.h或.lib文件,所以我很困惑我如何訪問dll中的類或使用我的項目中的C++(Visual Studio 2010)中的dll文件。我讀here,如果一個dll文件包含類,它很可能是一個COM組件。關於我應該看看爲了整合和使用該dll中的方法和對象的任何建議。與DLL混淆。沒有.lib或.h

更新:

我檢查,如果它是一個COM做一個import語句。但是,我收到「無法找到.tlb文件」。然後我決定使用dependency walker來檢查任何導出的方法(對象),它似乎沒有。我點擊主文件(已被高亮顯示)並且看不到任何導出的函數。關於下一步我應該檢查什麼的提示?這是我從依賴沃克得到的。 enter image description here

+1

只是一個參考給它添加在「COM」或「.NET」選項卡在VS的「添加引用...」對話框中。如果有抱怨,那麼就要爲圖書館的創建者提供一個導入庫。 :P – cHao 2013-03-11 19:47:02

+0

如何在C++中添加VS2010中的引用? – Rajeshwar 2013-03-11 19:53:07

+0

通過TLB使用COM,試試[如何在C中使用tlb文件?](http://stackoverflow.com/questions/4312711/how-to-use-tlb-file-in-c) – lsalamon 2013-03-11 19:53:35

回答

5

只有一個.dll文件,沒有對應的.h或.exp文件,你可能會試試看的一個地方就是exports表。諸如Dependency Walker之類的工具可以向您顯示此信息。

Dependency Walker的一個注意事項是,您需要爲二進制文件(您的DLL)使用正確的版本(x86或x86_64)。如果您不確定,請選擇一個版本並嘗試加載它。在CPU列的中間面板下,查看它是否顯示「x64」或「x86」,以確定您應該使用哪一個。

使用Dependency Walker提供的屏幕截圖(表示依賴於MSCOREE.DLL),我同意Eugene - 這很可能是.NET庫,而不是COM庫。您將需要檢查有關從C/C++調用.NET託管代碼的其他問題之一。

+0

如果不明顯,單擊一個模塊會顯示許多(但不一定是全部)可用函數。樹視圖左下方的面板顯示了所選可移植可執行文件(「PE」)對象的導出函數。 – user314104 2013-03-11 19:54:46

0

該DLL是最有可能的.NET程序集(看到這進口mscoree.dll中),所以你可能希望這樣的:How do I call a .NET assembly from C/C++?

+0

那麼這是否意味着我不能直接在C++中使用它?從我已經從你發佈的鏈接中讀取的那一點看起來好像我必須在我需要使用的方法上創建一個C#com封裝器。然後,我必須通過我的C++使用這個新的COM DLL導入?我得到這個正確的? – Rajeshwar 2013-03-12 00:28:32

+0

@Rajeshwar,是的,我認爲這將工作。程序集 - > COM包裝器 - > C++。 – Eugene 2013-03-12 15:19:47