库(.tlb)文件中宏的作用域

Scope of a macro in a library (.tlb) file?

本文关键字:作用域 文件 tlb      更新时间:2023-10-16

假设我们在.cpp文件中定义了一个宏"HELLO",并用它构建了一个.tlb文件。当我在另一个c++项目中导入这个.tlb文件时,我有权访问该宏吗?

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

类型库只存储类型信息(接口和类声明、typedef和其他元数据(,而不是代码。代码的实现是在相应的库(DLL(或服务器(EXE(中定义的。这个mean的类型库只告诉客户端在哪里查找代码。它们不提供代码。这就是为什么宏不能导出到tlb的原因。

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

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

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

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