2011-12-21 46 views
0

我在VS 2008得到以下錯誤:MIDL:錯誤MIDL9008

車庫停車場:錯誤MIDL9008:內部編譯器的問題 - 關於如何找到一個解決辦法的建議,請參閱文檔。

MIDL:斷言失敗:(RC < _MAX_DIR)& &(RC!= 0),文件d:\長角\ COM \ RPC \ MIDL \前\ filehndl.cxx,線821

的問題是由下面的代碼文件%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Include\Guiddef.h在我已經打上<-----行造成的:

#ifndef GUID_DEFINED 

#define GUID_DEFINED 

#if defined(__midl) 

typedef struct { 

     unsigned long Data1; 
     unsigned short Data2; 
     unsigned short Data3; 
     byte   Data4[ 8 ]; 

} GUID;  <------ 

#else 

typedef struct _GUID { 

     unsigned long Data1; 
     unsigned short Data2; 
     unsigned short Data3; 
     unsigned char Data4[ 8 ]; 

} GUID; 

#endif 

#endif 

重命名或刪除「GUID」將解決內部編譯器的問題,但當然會導致許多其他問題。使用的代碼和midl.exe可執行文件(來自WinSDK v6.0)與其他計算機上的錯誤不會發生。任何人比重新安裝Windows有更好的主意?

回答

0

似乎有什麼東西真的非常腐敗。雖然重新安裝Windows和Visual Studio幫助。

1

我的midl*文件在某些​​時候出現「損壞」,無論是在安裝了所有子組件之後還是安裝了Windows 8.1 SDK之後,或者更新了Visual Studio 2015之後 - 我想,因爲我沒有確切的軌跡,已被覆蓋。

從那以後,我一直收到MIDL9008編譯一個在此之前罰款的項目。當試圖構建某個項目時,Midlc.exe甚至崩潰。

解決的辦法是從

C:\Program Files (x86)\Windows Kits\8.1\bin\x86 

(because that's where midlc.exe and midl.exe were starting from, verified by using procmon)

與另一臺機器相同的文件,其中的問題是不存在更換midl*文件。

令人驚訝的是,來自同一文件夾的midl*文件的文件大小不同,儘管報告的版本號相同!這是一個明確的指標,取代他們可能會解決一些問題。

複製文件(midl.exe, midlc.exe, midlrt.exe, midlrtmd.dll)解決了這個問題。非常高興,我不必重新安裝Windows只是爲了解決這個令人討厭和令人沮喪的問題!

+0

感謝您的回答。如果其他人可以確認此解決方案適用於他們,請在評論中告訴我,我會將其標記爲答案。 – 2016-09-06 16:03:36