致命错误C1084:无法读取类型库文件:'Smegui.tlb':错误加载类型库/ DLL

问题描述:

我想构建一个应用程序的旧版本,它包含在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的东西如何工作,或者这个错误可能意味着什么,我将不胜感激。

我发现了一个更可靠的解决方案:打开与OLEView.exe这类TLB中,然后关闭它。

不知道这实际上做了什么,但它每次都有效。

我认为oleview实际上是Visual Studio中包含的示例之一,但我没有时间去调试它并查看它在做什么。

+0

解决了我的问题,你救了我这个:) – user1025852 2013-10-27 11:26:47

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

那么我终于找到了为什么我设法让它有时建立而不是其他......有点。

只要我用提升的管理员权限运行构建脚本,并让它尽可能发生,直到发生错误,然后再次运行构建脚本,作为受保护的管理员成功。这些步骤必须按照确切的顺序完成,其间没有其他步骤。如果我尝试在Visual Studio中构建它,它不起作用(尽管我确实让它成功了一次)。可能是某种虚拟化问题,尽管它仍然不太合理。

嗯,我不需要这方面的帮助,我知道这可能不能完全回答这个问题,而不知道这个构建究竟在做什么。但是,如果任何人有更多的想法,我会很乐意接受他们。

干杯,

Steiny