65,186
社区成员




_COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection));
发现微软它是利用宏定义的,接着定位_COM_SMARTPTR_TYPEDEF宏,发现其是在comdef.h这样定义的:
#define _COM_SMARTPTR_TYPEDEF(Interface, IID) \
typedef _COM_SMARTPTR<Interface, &IID> \
Interface ## Ptr
而_COM_SMARTPTR则是:
#define _COM_SMARTPTR _com_ptr_t
到此,你就应该知道,_ConnectionPtr真正类型应该是:
_com_ptr_t<_Connection,__uuidof(_Connection)>
模板类,一般你能在头文件中直接看到其实现,所以可以继续定位 _com_ptr_t,就能发现其在comip.h这个头文件中是如何实现的。当然你既然知道了这个类型,想必在msdn上直接搜这个类型 _com_ptr_t,那肯定就有文档了:
https://docs.microsoft.com/zh-cn/cpp/cpp/com-ptr-t-class?view=vs-2019
说了那么多,其实我就是想让你明白,你真正应该搜的是什么,如何知道有_com_ptr_t这么一个类? 如何找到这个类的过程很重要。
因为我看了你之前提的问题,让我甚是担心:
为什么就不利用一下你的IDE,转到HANDLE的定义呢? 轻轻一点,你就能知道它只是个void* :
typedef void * HANDLE
你还会问 void*是什么吗?