2008-09-17 43 views
29

我經常遇到類似的情況: 我有一堆COM .DLL(沒有IDL文件),我需要使用並調用它才能訪問一些外國(非開放的,未記錄的)數據格式。在非Microsoft平臺上使用組件對象模型(COM)

微軟的Visual Studio平臺有很好的功能來導入這樣的COM DLL並在我的項目中使用它們(Visual C++的#import指令,或者使用Visual Basic .NET的對話框來挑選和添加它們) - 這是廠商推薦的方法使用它們。

我會對找到一種在非微軟開發平臺上使用這些DLL的方法感興趣。也就是說,在使用MinGW或Cygwin編譯的C++項目中使用這些COM類,或者甚至是Wine的GCC端口到Linux(將C++針對Win32編譯爲在Linux上本地運行的二進制文件)。

我使用this驅動程序獲得了一些有限的成功,但是在100%的情況下(我不能使用某些方法返回的COM對象),這是不成功的。

有人在類似的情況下有成功嗎?

回答

22

回答自己,但我設法找到完美庫非Microsoft編譯器OLE/COM呼叫:disphelper

(根據許可的BSD許可證,它可從sourceforge.net獲得)。

它既適用於C也適用於C++(因此也適用於具有C綁定的其他語言)。它使用了printf/scanf-like format string syntax
(只要你在格式字符串中指定它就可以傳遞任何內容,不像XYDispDriver需要參數與類型庫中指定的內容完全匹配)。

我對它進行了一些修改,使其在Linux下與WineGCC一起編譯(從Win32代碼生成本地Linux精靈),並自動處理「通過ref」調用(stock disthelper要求程序員設置他/她自己的VARIANT)。

我的補丁版本和補丁可作爲GitHub上叉:

這裏是我的補丁:

+3

只是想知道你的補丁是否可以下載到某個地方? – ezpresso 2012-01-16 19:43:56

0

我認爲你應該可以使用免費工具Ole/Com Object Viewer來製作頭文件。

5

與Visual Studio和Windows SDK一起打包的Ole/Com對象查看器的問題是,它會生成.DLL中的損壞.IDL,無法進一步由MIDL將其編譯爲.H/.CPP對。

Wine自己重新實現OleViewer目前不穩定,並且在嘗試使用這些庫時崩潰。

相關問題