库(.tlb)文件中宏的范围?

时间:2013-03-19 10:00:32

标签: c++ macros typelib

假设我们在.cpp文件中定义了一个宏'HELLO',我们已经构建了一个.tlb文件。当我在另一个c ++项目中导入这个.tlb文件时,我是否可以访问该宏?

默认情况下,如果在.c文件中定义了宏,则作用域位于该文件中。如果在.h文件中定义了宏,则包含它的每个人都可以访问该宏。只是想知道甚至通过.tlb文件行为是否相同...... /

2 个答案:

答案 0 :(得分:3)

类型库只存储类型信息(接口和类声明,typedef,其他元数据),而不是代码。代码的实现在相应的库(DLL)或服务器(EXE)内定义。这个意思的类型库只告诉客户在哪里找到代码。他们不提供代码。这就是无法将宏导出到tlb的原因。

答案 1 :(得分:1)

像Aschratt所说,宏不存储在类型库中。但是,如果您的宏是整数常量,则可以在IDL文件中使用枚举:

enum Colors
{
    White = 1,
    Yellow = 2,
    BLue = 3
}

这适用于所有语言。例如,如果在C#中使用类型库,则会将枚举视为C#枚举。

如果类型库仅供特定C ++客户端使用,则可以使用cpp_quote IDL属性在生成的头中发出代码,然后使用#include指令包含该头而不是使用#import基于类型库生成新标头。

相关问题