C++ 毫无意义';MIDL#U接口';winapi中的宏?
浏览了一些旧代码后,我注意到有些类是这样定义的:C++ 毫无意义';MIDL#U接口';winapi中的宏?,c++,winapi,mingw,C++,Winapi,Mingw,浏览了一些旧代码后,我注意到有些类是这样定义的: MIDL_INTERFACE("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX") Classname: public IUnknown { /* classmembers ... */ }; 但是,宏MIDL_接口定义为: #define MIDL_INTERFACE(x) struct 在C:/MinGW/include/rpcndr.h中(在第17行附近)。宏本身显然是毫无意义的,那么这个宏的真正目的是
MIDL_INTERFACE("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
Classname: public IUnknown {
/* classmembers ... */
};
但是,宏MIDL_接口
定义为:
#define MIDL_INTERFACE(x) struct
在C:/MinGW/include/rpcndr.h中(在第17行附近)。宏本身显然是毫无意义的,那么这个宏的真正目的是什么呢?如果我不得不猜测的话,它是针对以下两个用例之一:
#define
的位置,这可能是可能的,也可能是不可能的,但这似乎是合理的用例。这本质上是第一种选择的特殊情况这是因为MinGW不支持COM(或者说,它的支持非常差)。定义COM组件时使用MIDL_接口,它由生成COM类型库和类定义的生成
在MSVC上,这个宏典型地扩展到更复杂的初始化和注释,以便将给定的C++类暴露到COM../P>< P>在Windows SDK版本中,宏扩展到
struct __declspec(uuid(x)) __declspec(novtable)
第一种方法允许使用u_uidof关键字,这是从typename获取接口guid的好方法。第二种方法禁止生成v表,该表从未用于接口。空间优化。谢谢,我根本不知道MinGW支持COM,即使很差(我不打算从一开始就使用COM;-)@Nebukadnezar:我相信你可以有限地使用COM,但你不能在MinGW中公开新的COM类型。它还缺少几个Windows COM头。我可能错了,我已经有一段时间没用MinGW了。(顺便问一下,你为什么要帮机器?我要告诉锡安…)别管那件事——我把尼布卡尼撒读作哈哈,好吧,我的名字对《黑客帝国》一点也不陌生。。我发誓D