2009-06-26 95 views
3

我正在嘗試提供一個提供VC++示例的庫;不過,我爲我的所有項目使用gcc/g ++。GCC/G ++的VC++ #import指令

那麼,VC++示例訪問圖書館是它使用#進口指令,傳遞庫DLL的位置的方式,那麼它就是一個使用命名空間庫名稱,然後它能夠​​創建一些未定義的類型(我假定它是在DLL中定義的),並用__uuidof創建一個新的實例。從此,爲了調用其中一個庫函數,該示例僅執行createdObj-> foo()就是這樣。

呃... g ++的#import與VC++的導入不同(請參閱here),所以這個例子不適用於我。

有什麼辦法可以將它轉換爲g ++下編譯的,還是我SOL直到庫開發人員爲我提供了一個靜態庫我可以試試?

回答

2

如果您使用的是cygwin,那麼這個頁面:http://www.cygwin.com/cygwin-ug-net/dll.html將爲您提供所需的全部幫助。

如果您使用的是mingw,您可以完成同樣的任務,但您可能不會擁有grep和sed,因此您必須使用其他一些方法來執行篩選以獲得您的.def文件。

+0

謝謝;不幸的是,這不起作用,因爲他們在該網站上發出的命令對我而言「沒有符號」。那麼,讓我想知道VC++如何能夠從中提取符號?也許是因爲庫的函數是stdcall函數,而不是cdecl函數? – beepboopbopbop 2009-06-26 19:58:34

+0

+1 thx鏈接... – 2011-02-10 16:06:45

1

如果您在VC++中使用#import,這意味着該DLL不是常規DLL,而是一個COM DLL。

由於gcc沒有COM支持,您只需等待庫作者編寫非COM版本即可。

2

也許它可以幫助您使用OLEViewer和「查看類型信息」來提取IDL的基礎知識。或者,也許你可以使用VC++生成的.tlh和.tli文件並將它們導入到G ++項目中。

我想這個答案太晚了,但現在我自己也遇到類似的問題,所以我剛剛進入這個線程。希望你能及時找到解決方案。

問候。