2010-06-16 65 views
2

我想構建一個應用程序的舊版本,它包含在Visual Studio 2003中編寫的VC++項目。致命錯誤C1084:無法讀取類型庫文件:'Smegui.tlb':錯誤加載類型庫/ DLL

我的操作系統是Windows 7 Enterprise(64位)。 當我嘗試和構建解決方案我收到以下錯誤:

  • 錯誤C4772:#進口引用來自缺少類型庫的類型; '__missing_type__'用作佔位符
  • 致命錯誤C1084:無法讀取類型庫文件:'Smegui.tlb':加載類型庫/ DLL時出錯。

他們都抱怨以下import語句:

#import "Smegui.tlb" no_implementation 

這不是文件路徑是不正確的,重命名文件Smegui.tlb的情況下,使編譯器拋出另一個錯誤說它找不到圖書館。

Smegui來自另一個應用程序,這個人依賴於。我想也許我錯過了一個DLL,但沒有Smegui.dll這樣的東西。

所有我知道的.tlb文件是,他們是一個類型庫,你可以從一個裝配使用tlbexp.exe或regasm.exe(後來還註冊與COM大會)

有創建它們也是一個使用自定義任務來調用devenv.com來構建項目的Apache Ant構建腳本。這是構建服務器最初用於構建應用程序的腳本。當我嘗試運行它時,它給了我相同的錯誤。

最奇怪的是,我知道它應該工作,因爲它都是從顛覆中剛剛檢查出來的。我嘗試了管理員和用戶提升的許多不同組合,VS vs Ant構建,清理,發佈。

我已經成功地構建了大約5次,但構建似乎是非確定性的。

如果任何人都可以告訴我這個tlb的東西如何工作,或者這個錯誤可能意味着什麼,我將不勝感激。

回答

3

我發現了一個更可靠的解決方案:打開與OLEView.exe這類TLB中,然後關閉它。

不知道這實際上做了什麼,但它每次都有效。

我認爲oleview實際上是Visual Studio中包含的示例之一,但我沒有時間去調試它並查看它在做什麼。

+0

解決了我的問題,你救了我這個:) – user1025852 2013-10-27 11:26:47

2

http://msdn.microsoft.com/en-us/library/sce74ah7%28VS.71%29.aspx

smegui.tlb被引用一些其他的TLB編譯器無法找到。如果你有.idl的smegui,你可能會弄清楚另一個是什麼。我懷疑缺少的tlb是原始生成機器已經註冊的東西,但是您的機器沒有註冊。

類型庫是一組接口,coclasses和枚舉的二進制描述。它們通常是爲COM組件生成的,在tlbexp的情況下,並且通過彙編元數據創建tlb。對於本地COM組件,它們通常由midl工具從idl(接口描述語言)文件生成。

編輯:

我剛剛注意到你在x64的Windows上。您是否使用Visual Studio的新版本構建項目?如果是這樣,你的目標是x86還是x64?如果是後者,它可能只是一個編譯器無法找到的32位組件(或者不太可能,x86編譯器無法找到的x64組件,如果您的目標是x86),對於WOW64,註冊表虛擬化爲x86 vs. x64應用程序。

+0

感謝您的幫助。 很高興知道idl。 C++絕對不是我的強項。 Yup運行Win32的構建版本,其他依賴項也是32位。 – Steiny 2010-06-17 21:37:30

0

那麼我終於找到了爲什麼我設法讓它有時建立而不是其他......有點。

只要我用提升的管理員權限運行構建腳本,並讓它儘可能發生,直到發生錯誤,然後再次運行構建腳本,作爲受保護的管理員成功。這些步驟必須按照確切的順序完成,其間沒有其他步驟。如果我嘗試在Visual Studio中構建它,它不起作用(儘管我確實讓它成功了一次)。可能是某種虛擬化問題,儘管它仍然不太合理。

嗯,我不需要這方面的幫助,我知道這可能不能完全回答這個問題,而不知道這個構建究竟在做什麼。但是,如果任何人有更多的想法,我會很樂意接受他們。

乾杯,

Steiny

相關問題