1

背景

我们的构建使用 ant 和自定义任务来构建 Visual Studio 项目/解决方案以及一些 Java 项目。结构基本上是一棵大树,项目中的工件通常向上复制到一个公共构建目录。

这以前完全是一团糟,我已经大大简化了 ant 脚本,现在我已经完成了 Visual Studio 项目/解决方案的大部分工作。这些项目非常古老,并且已通过 Visual Studio 的每个版本升级到 2013 年。我所做的部分更改是使用尽可能多的默认项目属性和宏。其中大多数曾经是硬编码的。

尽管我已修改项目以使用 $(Configuration) 宏将工件与不同的配置分开,但它们仍会被复制到其他解决方案中其他依赖项目的公共位置。因此,为了避免混淆并确保我们的调试版本链接到所有调试库(以前没有发生过),我一直在为目标名称添加后缀。例如,调试 Unicode 构建的目标名称将是 $(ProjectName)DU。

问题

到目前为止这一切都很好,但现在我不确定如何为我们的一个 COM 库完成这些更改。这个库有一个 IDL 文件,MIDL 编译器生成一个 TLB 文件。也许这不是一个好方法,但现在我希望 TLB 文件也有不同的后缀,具体取决于构建。问题是,当我更改 MIDL 配置的类型库属性时,这会破坏 RC 文件中的编译时指令。我认为可以在 TEXTINCLUDE 块中使用 #ifdefs,具体取决于是否设置了 _UNICODE 或 _DEBUG(前提是我通过 Resource Includes 对话框执行此操作,因此我不会破坏 RC 文件)。这也意味着还有其他 importlib 属性也需要 #ifdef 检查。

目前它有点工作而无需重命名 TLB 文件,但这只是因为它们目前仅在此解决方案中使用。

有没有人做过这样的事情或知道更好的解决方案?

更新

我想我在这里真正需要知道的是,在另一个 COM DLL 中使用类型的最佳方法是什么?我什至应该使用 importlib 吗?MSDN 文档说,在大多数情况下,您应该改用导入。我试过这个,但打破了一大堆东西。

4

0 回答 0