我正在维护一个VS2010项目,该项目有许多交叉引用的COM库。我试图以一种可以从已安装VS2010的随机工作站构建的方式来配置该项目。工作站可能同时为32和64位,因此,如果我将项目配置为“注册输出”,则该构建将无法在32位计算机上构建,因为无法加载64位DLL来调用dllRegisterserver。

以下是一个示例:项目B的Typelib来自项目A的Typelib。项目C将通过以下语句参考项目B。

#import "B.tlb"

由于库b引用A,当b.tlb被导入时,编译器试图从A加载类型。因此,如果未注册A,则该编译将失败:

error C4772: #import referenced a type from a missing type library ...

我尝试使用Oleview应用程序打开B.TLB,如果使用Regsvr32进行了注册,则可以肯定的是,仅显示库的正确文件名。

因此,我的问题是:是否有其他方法可以通过将所有文件以某种方式将所有文件放在同一目录中或附加某种清单来正确地解决自己正确解决,而无需注册TLB?例如,将库的TLB重命名为.tlb或类似的内容。

有帮助吗?

解决方案

尝试首先导入引用的A.TLB,或使用include()选项将其列在b.tlb的导入中。

仅有的 #进口 如果您可以避免不必要地引入其他参考文献,则计划使用的界面部分。

其他提示

有一个不错的选择:将.tlb文件的路径添加到VC ++目录 - >可执行目录这将为编译器提供的路径环境变量添加路径。根据这个: http://msdn.microsoft.com/en-us/library/sce74ah7.aspx 仅在路径和lib中搜索导入的一个中引用的所有.tlb。

最简单的方法是将所有 *.tlb文件放在DIR中时。

取决于您的项目配置。将所有 *.tlb文件复制到:$(OUTDIR),$(projectDir),dir where with with #import,当您生成 *.tlb等时dir,dir

问候,马里乌斯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top