#import导入的类型继承自IUnknown,为什么不需要实现AddRef,Release,QueryInterface接口? 在...vc98\include\unknwn.h里面,IUnknown的AddRef,Release,QueryInterface都是纯虚接口。我想知道,COM客户端程序既然ATL工程里面用#import生成的结构体是从IUnknown继承的,为什么不需要实现这几个纯虚函数呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你Import的时候,生成的包装类,应该自动帮你把这几个接口代码填充好了 但是我在tlh/tli文件里面并没有看到这3个函数的实现代码:struct __declspec(uuid("3019bb6f-d822-4bfc-abe9-23468aa965ca"))IEvent1 : IUnknown{ // // Wrapper methods for error-handling // HRESULT Add ( long n1, long n2 ); HRESULT Advise ( struct ICallBack * pCallBack, long * pdwCookie ); HRESULT Unadvise ( long dwCookie ); // // Raw methods provided by interface // virtual HRESULT __stdcall raw_Add ( long n1, long n2 ) = 0; virtual HRESULT __stdcall raw_Advise ( struct ICallBack * pCallBack, long * pdwCookie ) = 0; virtual HRESULT __stdcall raw_Unadvise ( long dwCookie ) = 0;}; 概念啊~组件中必须有3个函数不假,QueryInterface、AddRef、Release,它们3个函数也组成IUnknown任何接口,其实都包含 IUnknown 接口在任何接口上,调用表中的第一个函数,其实就是调用 QueryInterface()函数,就得到你想要的另外一个接口指针。这个性质叫“接口的传递性” 而因为你使用的是ATL,你的 C++ 类通常是从某些类,比如CComCoClass派生而来,这些基类已经为你实现了你所说的那些基本接口管理代码 接口的实现是COM服务器端的事情,客户端只需要调用这些接口就可以了。 如何让EDITTEXT的滚动条在最下面 WinSock API接收数据(recv)的问题,从Delphi翻译成VC++ 关于PE文件格式的疑问 (MZ头 + DOS Stub不能运行?) 简单的功能不会实现(多线程?) 安装程序解压缩问题 请问如何从CListBox中读取选择的字符串!我的问题在哪里?? 关于菜单的问题 怎样从头开始学习串口编程? 快来帮帮我这只菜聊!为什么CMyPenApp theApp;回出错!? 高分狂送! RGB <==> CMYK 二次封装VFW采集视频的DLL。。。 怎样给电脑上的软件设置快捷键
IEvent1 : IUnknown
{
//
// Wrapper methods for error-handling
// HRESULT Add (
long n1,
long n2 );
HRESULT Advise (
struct ICallBack * pCallBack,
long * pdwCookie );
HRESULT Unadvise (
long dwCookie ); //
// Raw methods provided by interface
// virtual HRESULT __stdcall raw_Add (
long n1,
long n2 ) = 0;
virtual HRESULT __stdcall raw_Advise (
struct ICallBack * pCallBack,
long * pdwCookie ) = 0;
virtual HRESULT __stdcall raw_Unadvise (
long dwCookie ) = 0;
};
任何接口,其实都包含 IUnknown 接口
在任何接口上,调用表中的第一个函数,其实就是调用 QueryInterface()函数,就得到你想要的另外一个接口指针。这个性质叫“接口的传递性”