【问题标题】:A bug happened when I try to import a "tlb" file. The VS 2013 said that it couldn't find a "tlh" file当我尝试导入“tlb”文件时发生错误。 VS 2013 说找不到“tlh”文件
【发布时间】:2016-07-01 20:15:27
【问题描述】:

我正在尝试导入如下文件:

#import "C:/xxxx/Proj/msd60.tlb"

但它告诉我它无法打开源文件“C:/xxxx/Proj/msd60.tlh”

tlb 文件实际上存在于我指向它的位置。

在我看来,VS 可以将 tlb 文件拆分为 tlh 文件(作为头文件)和 tli 文件(作为 cpp 文件)。所以发生了一些事情并使它无法创建 tlh 文件?但我不知道它是什么。同时,其他项目中的另一个cpp可以打开“msd60.tlb”。所以环境可能不存在问题。

如何解决?

【问题讨论】:

    标签: c++ visual-studio-2013 tlb


    【解决方案1】:

    我在 VS2015 中遇到了与 msado20.tlb 相同的问题。但是我在VS2013中遇到了同样的问题。经过一番研究,我了解到VS中的绝对路径可能存在一些问题,最好尝试相对路径(这很麻烦)。

    在我的情况下,项目位于不同的驱动器中,因此相对路径会很长,因此我将 msado20.tlb 文件复制到我的项目文件夹并再次构建解决方案。在这种情况下,它奏效了。我知道这更像是一种技巧而不是解决方案,但它可能对其他人有所帮助。该指令如下所示:

    #import "msado20.tlb" no_namespace rename("EOF", "adoEOF")
    

    如果有人尝试使用相对路径,确定它是否有效会很有趣。将文件复制到我的项目文件夹感觉不是解决方案,而是 hack

    【讨论】:

    • 对 Visual Studio 2019 仍然有效。但我没有复制 TLB 文件,而是将 C:/xxxx/Proj" 文件夹添加到附加包含目录列表(C/C++ | 项目属性中的常规选项卡)。惊喜,然后它甚至可以在#import语句中使用绝对路径(#import“C:/xxxx/Proj/msd60.tlb”)。很可能,旧的MSVC错误从未得到修复。我认为C++开发工具现在是一个低优先级Visual Studio 团队。
    【解决方案2】:

    您为 MIDL 编译器输出设置的属性可能存在问题。 在您的项目设置中,使用 .tlb 位置的相对路径而不是绝对路径。 Visual Studio 有一个怪癖,它有时不尊重绝对路径。

    交替 如果可能,请尝试再次手动创建 .tlb。

    REGASM.exe "C:\Pathtoyourdll\your.dll"
    

    【讨论】:

    • 感谢您的建议。我尝试了第一个解决方案,但又失败了。第二个我不能尝试的原因是 tub 文件不是我自己创建的。是从别人那里下载的。。总之,非常感谢~
    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多