2012-11-02 58 views
5

每次嘗試編譯使用COM的Visual C++(Visual Studio 2010)項目時,都會看到MIDL2398錯誤。該項目在我的Windows 7開發人員計算機和Windows Server 2008構建計算機上構建得非常好,但不在Windows Server 2012構建計算機上構建。在Windows 2012上使用Visual Studio 2010創建MIDL2398錯誤

,我發現這個網站有關的各種MIDL編譯器錯誤:http://blog.yezhucn.com/midl/compiler_errors.htm

但是,我想它的建議對於MIDL2398,我驗證了「midlc.exe」是在同一目錄「MIDL.EXE」和這兩個版本都是相同的版本(都是Windows SDK v7.1中的文件版本:7.0.555.1產品版本:6.1.7600.16385)。

我猜它與Windows Server 2012有關,但我不知道。

有沒有人能夠獲得Windows SDK v7.1 MIDL編譯器在Windows Server 2012上工作?或者,有誰知道還有什麼可能導致MIDL2398?

+0

從Visual Studio 2010命令提示符中,鍵入「where midl * .exe」,並驗證是否僅找到這兩個文件。 SysInternals的ProcMon是驗證是否使用了正確的EXE文件的另一種方法。 –

+0

我在爲我正在構建的項目的預構建事件中執行了該操作,並且該命令爲我提供了Windows SDK v7.1 midl EXE的路徑,這正是我所期望的。我還更改了項目設置以嘗試使用Windows SDK v7.0A(包含在Visual Studio 2010中),where命令正確報告了v7.0A版本的midl EXE的路徑,但我仍然得到相同的midl錯誤我是否針對Windows SDK v7.0A或v7.1進行編譯。同一臺Windows 2012虛擬機上的同事嘗試使用Windows SDK版本8進行編譯,但也失敗了。 – MikeW

回答

9

我想出了問題。

我在生成服務器上安裝了SysInternals套件(http://technet.microsoft.com/en-US/sysinternals),然後使用進程監視器(procmon)來查看MIDL.exe正在嘗試和未執行的操作。

就我而言,事實證明,在名爲「Program」的C:驅動器的根目錄中存在一個文件,因此該文件的路徑爲「C:\ Program」。我不知道什麼或爲什麼,但MIDL.exe正在做這個文件。我將該文件重命名爲「Program - MW」,並且MIDL2398錯誤消失。

如果有其他人遇到MIDL2398錯誤,我建議您還使用SysInternals的進程監視器,爲進程名添加過濾器 - 包含midl,運行您的編譯器並檢查進程監視器日誌以查找錯誤和奇怪行爲。它爲我工作!

+1

我有完全相同的問題,謝謝!不知道該名稱程序如何到達那裏 – deltanine

+1

我看到你[報告connect.microsoft.com上的錯誤](https://connect.microsoft.com/VisualStudio/feedback/details/771055/midl-compiler-fails -with-midl2398-錯誤時-A-文件存在-AT-C-程序)。雖然該報告在2012年關閉,但我可以確認問題在Visual Studio 2013 update 5中仍然存在。在我的情況下,文件'C:\ Program'是由我們的內部實用程序之一創建的,無法使用空格處理路徑 - 它將'C:\ Program Files \ ...'截斷爲'C:\ Program',然後愉快地將東西寫入該文件。 – herzbube

1

在VS2012上,midl錯誤是由com0com安裝程序造成的,它在C驅動器下創建了Program文件。如前所述,這與MIDL相混淆。

文件C:\ Program具有以下內容。只需將該文件重命名爲其他內容,例如:C:__ Program讓Midl感到高興。在線0 ERROR

DIALOG::{ SetupOpenInfFile(\窗口\ system32 \ com0com.inf C):2 - 系統無法找到指定的文件。

} ...

相關問題