严重错误C1084:无法读取类型库文件:'Smegui.tlb':加载类型库/ DLL时出错

ste*_*bot 3 dll typelib visual-c++

我正在尝试构建由Visual Studio 2003中编写的VC ++项目组成的应用程序的旧版本。

我的操作系统是Windows 7 Enterprise(64位)。当我尝试构建解决方案时,出现以下错误:

  • 错误C4772:#import从缺少的类型库中引用了一个类型;“ __missing_type__”用作占位符
  • 严重错误C1084:无法读取类型库文件:'Smegui.tlb':加载类型库/ DLL时出错。

他们俩都抱怨以下进口声明:

#import "Smegui.tlb" no_implementation
Run Code Online (Sandbox Code Playgroud)

这不是文件路径不正确的情况,因为重命名Smegui.tlb文件会导致编译器抛出另一个错误,指出它找不到库。

Smegui来自另一个依赖于此的应用程序。我以为也许我缺少dll,但没有Smegui.dll这样的东西。

我只知道.tlb文件是类型库,您可以使用tlbexp.exe或regasm.exe从程序集创建它们(后者也向COM注册该程序集)

还有一个Apache Ant构建脚本,该脚本使用自定义任务来调用devenv.com来构建项目。这与构建服务器最初用于构建应用程序的脚本相同。当我尝试运行它时,它会给我同样的错误。

对此最奇怪的是,我知道它应该可以正常工作,因为所有这些都是从Subversion刚签出的。我尝试了管理员与用户提升,VS与Ant构建,清理,发布的许多不同组合。

我已经成功构建了大约5次,但是构建似乎是不确定的。

如果有人能弄清楚这种tlb东西的工作原理或该错误可能意味着什么,我将不胜感激。

ste*_*bot 5

我找到了一个更可靠的解决方案:使用oleview.exe打开tlb,然后将其关闭。

不知道这实际上是做什么的,但是每次都起作用。

我认为oleview实际上是Visual Studio附带的示例之一,但是我没有时间对其进行调试并查看其功能。


erg*_*ack 5

我遇到了这个错误,因为一个类型库试图加载它无法找到的依赖类型库。即使依赖类型库在同一目录中,即使该目录在可搜索路径中,编译器也会错误加载第一个类型库,但不会在错误中提及依赖类型库。

为了找到伪缺失类型库,我在编译期间运行了 Process Monitor (procman64.exe)。这说明上报的类型库加载成功后,找不到依赖的类型库。它甚至显示了它正在寻找依赖类型库的所有地方,但没有一个是它应该寻找的地方(例如:进程输出)。

修复方法是向<PreBuildEvent>项目添加一个以将依赖.tlb文件复制到实际正在搜索的目录之一。

<PreBuildEvent>
  <Command>copy /Y ..\Lib\Interop\CWSpeechRecLib.tlb .\</Command>
</PreBuildEvent>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢伙计,在“致命错误 C1084:无法读取类型库文件:'xxxxxxxxxx':加载类型库/DLL 时出错”半天后,使用 ProcMon 帮助了我。 (2认同)