我正在尝试在 C++ 中使用 COM 库。我有一个#import "TheLibrary.dll",它使用库中的类创建 tlh 和 tli 文件。
现在,我的问题是 COM 对象公开了一些枚举,其中包含一些常量列表的值,这些常量列表也在 Windows SDK 标头中。我认为这是因为 Visual Basic 开发人员已经命名了这些常量的变体,而不必使用它们的数值。
但这对我来说是个问题,因为这些头文件是在我的 typelib 被 #import'ed 之前包含的;所以现在枚举成员声明被替换为 windows 头文件中的数字常量,导致我的编译失败。
例子:
windows头文件:
#define RES_AND ((ULONG) 0x00000000)
生成的 tlh:
enum __declspec(uuid(-some guid-))
RestrictionKind
{
RES_AND = 0,
.. etc
所以问题很明显;tlh 中的枚举被扩展,结果是尝试将常量分配给数字。
现在我看到了几种解决方案,它们都没有吸引力:
在#import 时对每个项目进行“重命名”。有数百个这样的常数,不期待。
一起省略枚举。这会严重削弱我对 COM 对象的访问(我还没有尝试过,也许整个库甚至会变得不可用)。
在#import 之前对所有这些常量执行#undef。同样,它们有数百个,除此之外,我以后将无法使用它们-除非我再次执行#define ...
所以我在这里有点不知所措。我希望有一种方法可以对枚举值进行大规模重命名,但#import 指令的文档并没有给我太多希望。
剩下的几个 COM 程序员有什么想法吗?谢谢。