c++ - 无需注册 DLL 即可解决 C4772 错误的任何方法?

标签 c++ visual-studio-2010 com typelib midl

我正在维护一个 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/

相关文章:

c++ - 将 int 转换为 int 指针地址

c++ - 有没有办法让编译器在 catch 子句中自动命中一次语句(断点)

c# - 如何使用 Visual Studio(和/或 ReSharper)从类字段生成构造函数?

c++ - Qt metaObject 链接器问题

delphi - 从delphi应用程序调用.net4.0 com服务器后出现错误异常

c++ - 如何将 COM 方法作为函数参数传递?和 Microsoft 编译器错误 C3867

c++ - 在测试 SFINAE 时,我发现了一些我认为不应该起作用的东西

c++ - 无法捕获异常!

excel - powershell:如果 excel 已经在运行,则获取实例,否则启动它 - 带有异常处理

c++ - 左尖括号解释为 operator< 而不是模板参数