代码之家  ›  专栏  ›  技术社区  ›  steinybot

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

  •  3
  • steinybot  · 技术社区  · 14 年前

    我的操作系统是Windows 7 Enterprise(64位)。

    • 致命错误C1084:无法读取类型库文件:“Smegui.tlb”:加载类型库/DLL时出错。

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

    #import "Smegui.tlb" no_implementation
    

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

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

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

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

    如果有人能解释一下tlb是如何工作的,或者这个错误可能意味着什么,我将非常感激。

    4 回复  |  直到 10 年前
        1
  •  5
  •   steinybot    13 年前

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

        2
  •  4
  •   Logan Capaldo    14 年前

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

    smegui.tlb正在引用编译器找不到的其他tlb。如果您有用于smegui的.idl,那么您就可以知道另一个是什么。我怀疑丢失的tlb是原始构建计算机已注册的东西,但您的计算机尚未注册。

    类型库是一组接口、coclass和enum的二进制描述。它们通常是为COM组件生成的,在tlbexp和regasm的情况下,tlb是从程序集元数据创建的。对于本机COM组件,它们通常由midl工具从idl(接口描述语言)文件生成。

    我刚注意到你在x64的窗户上。您正在使用新版本的visualstudio构建项目吗?如果是,您的目标是x86还是x64?如果是后者,则可能只是编译器找不到的32位组件(或者,如果您的目标是x86,则x86编译器找不到x64组件的可能性较小),对于WOW64,注册表是针对x86和x64应用程序虚拟化的。

        3
  •  4
  •   ergohack    6 年前

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

    procman output ).

    <PreBuildEvent> 到项目以复制依赖项 .tlb

    <PreBuildEvent>
      <Command>copy /Y ..\Lib\Interop\CWSpeechRecLib.tlb .\</Command>
    </PreBuildEvent>
    
        4
  •  0
  •   steinybot    14 年前

    好吧,我终于明白了为什么我有时能把它造出来,而不是其他的。。。某种程度上。

    好吧,我不需要在这方面的帮助了,我知道这可能是不可能完全回答这个问题,而不知道确切的建设正在做什么。然而,如果有人有任何更多的想法,我会很高兴地接受他们。

    斯坦尼