【问题标题】:How can I import COM .tlb file into C++ file with relative path?如何将 COM .tlb 文件导入具有相对路径的 C++ 文件?
【发布时间】:2019-11-02 23:06:38
【问题描述】:

我有一个 COM .tlb 文件,我想在不使用 tlb 文件的绝对路径的情况下导入我的 c++ 项目。我该怎么做?

我正在使用 Visual Studio,并且有一些 C# 和 C++ 项目。我的 C# 项目之一注册 COM 对象并生成 .tlb 文件。之后,我想将此文件与另一个 C++ 项目一起使用。所以我尝试导入它。使用绝对路径(.tlb 文件位置是我的解决方案输出目录)可以正常工作(1),我也可以使用相对路径(2),但我想用于导入的是(3)。主要原因很简单,我想避免在我的代码中使用 Debug 或 Release 路径。我找到了一个解决方案(4),但是当我尝试构建我的解决方案(例如在发布模式下)时,它还想读取调试文件,我认为这不是最好的解决方案(首先我必须构建我在调试和发布中的 COM C# 项目,之后我将能够构建我的整个解决方案)。所以我的问题是,哪个 C++ 项目选项对#import 有影响?我尝试将 VC++ 目录 -> 库目录设置为 $(SolutionDir)$(Platform)\$(Configuration)\ 但它不起作用。提前感谢您的帮助!

(1) #import "C:\MyProjects\Project\x64\Release\myfile.tlb 要么 #import "C:\MyProjects\Project\x64\Debug\myfile.tlb

(2) #import "..\x64\Release\myfile.tlb" 要么 #import "..\x64\Debug\myfile.tlb"

(3) #import "myfile.tlb"

(4) #ifdef 发布 #import "..\x64\Release\myfile.tlb" #别的 #import "..\x64\Debug\myfile.tlb" #endif

当我尝试通过以下选项使用 #import "myfile.tlb" 时: VC++ 目录 -> 库目录到 $(SolutionDir)$(Platform)\$(Configuration)\

【问题讨论】:

  • 通常,无论构建是调试还是发布,tlb 文件都是相同的(它们只是声明)
  • (3) 应该工作得很好。您最好检查该 C# 项目在做什么,默认情况下它不会将 .tlb 文件保存到解决方案目录。
  • 使用 sysinternals 中的 procmon 来检查 Visual Studio 究竟使用了哪些路径(例如,您可以过滤文件事件和进程名称)
  • "通常,无论构建是调试还是发布,tlb 文件都是相同的" 确切地说,我不知道这一点。我对这个问题的解决方案:我使用 postbuild 操作将 .tlb 文件从输出目录复制到另一个地方,例如:使用 xcopy 的“C:\MyProjects\Project\Source\myfile.tlb”。现在我可以轻松地使用这个:#import "myfile.tlb" 谢谢你的回答,在我的特殊情况下,这个解决方案对我来说是最好的。

标签: c++ import com unmanaged


【解决方案1】:

可能是这个 .tlb 文件的路径(“C:\MyProjects\Project\x64\Release\myfile.tlb”) 未添加到 '$(SolutionDir)$(Platform)\$(Configuration)\' 中。

请检查 '$(SolutionDir)$(Platform)\$(Configuration)\' 的值并将 .tlb 文件的路径添加到其中,从而帮助 Visual Studio 找到 .tlb 文件。 或者可能将 .tlb 文件复制到已经在 '$(SolutionDir)$(Platform)\$(Configuration)\' 中的目录之一

另一个建议:同时检查 .tlb 是否正确注册。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 2016-06-24
    • 2011-04-15
    • 1970-01-01
    • 2021-12-20
    • 2018-06-27
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多