我正在维护一个 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 注册的,它肯定只会显示库 A 引用的正确文件名。
所以,我的问题是:是否有任何其他方法可以让库引用正确地自行解析,而无需注册 TLB,只需将所有文件以某种方式放在同一目录中,或附加某种 list ?例如,将库的 TLB 重命名为 .tlb 或类似的名称。
最佳答案
有一个不错的选择:将 .tlb 文件的路径添加到 VC++ 目录 -> 可执行目录 这会将路径添加到将提供给编译器的 PATH 环境变量。根据这个:http://msdn.microsoft.com/en-us/library/sce74ah7.aspx导入的所有 .tlb REFERENCED 仅在 PATH 和 LIB 中搜索。
关于c++ - 无需注册 DLL 即可解决 C4772 错误的任何方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3773568/