2010-06-29 28 views
3

我在Windows上使用Qt 4.6.3和MinGW來構建Qt應用程序,現在需要將COM接口添加到我的應用程序中。我啓用了ActiveQt,但因爲丟失了MIDL編譯器的副本,導致後鏈接錯誤。我下載了最新的MS Windows SDK的副本,其中包括MIDL,但現在MIDL抱怨它無法找到cl.exe。我可以得出的唯一結論是,您只能使用MS編譯器構建ActiveQt應用程序,而我寧願避免這種情況。是否可以與MinGW合作?或者我運氣不好?使用MinGW構建ActiveQt(COM)應用程序

回答

2

使用MS編譯器和工具似乎是實現這種工作的唯一可靠方法。

1

那麼,你可以使用MinGW來構建ActiveQt,但在其上使用一堆COM的東西可能是不可能的,因爲它可能會或可能不會出現在MinGW中。一些想法:

  1. 使用任何MS SDK工具使用MinGW是不行的(例外是mingw.org + DXSDK應該工作的大部分時間)。

  2. 您確定在編譯時鏈接了所有必需的庫嗎?如果你不顯示確切的錯誤信息,我無法提供更多幫助。

  3. mingw-w32/w64 project試圖提供一個完整的「Windows SDK for GCC」;它可能包含您正在查找的庫/文件。他們提供了一個x64和x86編譯器,以及相當不錯的DX支持。我對他們的COM沒有經驗,但我相信它會比mingw.org更完整。您可以隨時聯繫論壇或郵件列表中的開發人員,他們非常有幫助。

+0

該應用程序鏈接正常。這是啓動MIDL的後鏈接階段,這是問題 - MIDL需要cl.exe(MS編譯器)。 – Rob 2010-06-29 12:07:33

1

你可以試試midl的wine實現,widl。有關在Windows上構建的信息,請參閱Wine wiki page

如果您想快速運行,請獲取wine-prgs-0.9.14-mingw.zip並查看它是如何工作的。

0

我已經解決了這個問題,接下來的方式:

了QtCreator,Msys2和VS2015安裝社區。

啓動Qt Creator的與批處理腳本:

@echo off 
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 8.1 

setlocal 
set MSYSTEM=MINGW32 
set MSYS2_PATH_TYPE=inherit 
start "" "C:\msys64\usr\bin\mintty" -i /msys2.ico -e /usr/bin/bash --login -c "/c/Qt/Tools/QtCreator/bin/qtcreator.exe" 

exit /b 0 

我啓動QtCreator出Msys2 envioronment的,因爲它提供了構建第三方在我的項目需要非標準的Unix工具。 因此理論上這並不是強制要求Msys2。

請注意:不使用WinSDK 10.0(或以上版本),因爲它沒有PATH變量中的midl.exe。

這樣做會創建PATH環境變量與Qt Creator的最高優先級(所以你會使用gcc從Qt安裝),Msys2下一個(所以你可以使用標準的Unix工具)和MSVC和WinSDK 8.1在最後的地方(所以而建立你會發現midl編譯器)。

現在我成功構建dll並將其傳遞給midl形式的WinSDK,但至今我仍然試圖在系統中註冊它。