【问题标题】:MIDL2015 warning when using importlib attribute使用 importlib 属性时出现 MIDL2015 警告
【发布时间】:2014-09-05 04:25:27
【问题描述】:

我有一个旧版 Visual Studio 解决方案,其中包含多个项目(已升级到 Visual Studio 2013)。其中一个项目会生成一个 COM DLL。然后通过 importlib 属性将来自该 DLL 的 TLB 导入到另一个项目的 IDL 文件中。当 MIDL 编译器尝试编译依赖项目的 IDL 文件时,它会生成以下警告:

警告 MIDL2015:无法在 importlib 中加载 tlb

当我使用 TLB 文件的完整路径时,它可以工作。

我已尝试将路径添加到 MIDL -> Additional Include Directories 属性,但我认为这仅适用于 IDL、标头和 ACF 文件 (/I switch)。

我也尝试过 Linker -> Additional Library Directories 属性,但这也没有用。

解析 importlib 属性时 MIDL 使用什么搜索路径?

【问题讨论】:

  • 我猜你应该使用另一个项目的相对路径 - 你一个接一个地构建它们,不是吗?
  • 除非他们根据构建配置转到目录。我想我可以用#ifdefs 解决这个问题(如果它适用于 MIDL 编译器)。在不破坏 RC 文件的情况下,我无法找到一种在 TLB 文件中添加后缀(例如 D 表示调试)的方法。

标签: c++ com visual-studio-2013 midl tlbimp


【解决方案1】:

不直观,midl.exe 没有命令行选项来指定要搜索的目录。注意 midl.exe 从来没有遇到过 importlib("stdole2.tlb") 的问题,这个文件存储在 c:\windows\system32 中。

项目 + 属性,VC++ 目录,将存储 .tlb 的路径附加到 Executable Directories 设置。完成并添加“c:\temp”后,它应该看起来像“c:\temp;$(ExecutablePath)”。

不太确定会赢得很多奖品。将 .tlb 生成或存储在更可预测的路径中,这样您就可以在 importlib 指令中使用相对路径,从而减少一年后令人头疼的意外。

【讨论】:

  • 不得不读几遍,但我现在明白你的意思了,谢谢。这比我能想到的任何东西都要好得多。我正在摸索试图用 IDL 文件的导入替换 importlib。不太确定我在做什么。仍在尝试了解所有这些东西的含义以及如何使用它。
猜你喜欢
  • 2013-10-24
  • 2021-12-15
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多