MFC对COM的支持
2011-06-09 21:13 Clingingboy 阅读(1709) 评论(0) 编辑 收藏 举报
一.COM接口映射表
BEGIN_INTERFACE_PART(Dictionary, IDictionary)
INIT_INTERFACE_PART(CDictionary, Dictionary)
STDMETHOD_(BOOL, Initialize)();
STDMETHOD_(BOOL, LoadLibrary)(LPOLESTR);
STDMETHOD_(BOOL, InsertWord)(LPOLESTR, LPOLESTR);
STDMETHOD_(void, DeleteWord)( LPOLESTR);
STDMETHOD_(BOOL, LookupWord)(LPOLESTR, LPOLESTR *);
STDMETHOD_(BOOL, RestoreLibrary)(LPOLESTR);
STDMETHOD_(void, FreeLibrary)();
END_INTERFACE_PART_STATIC(Dictionary)
#define BEGIN_INTERFACE_PART(localClass, baseClass) \
class X##localClass : public baseClass \
{ \
public: \
STDMETHOD_(ULONG, AddRef)(); \
STDMETHOD_(ULONG, Release)(); \
STDMETHOD(QueryInterface)(REFIID iid, LPVOID* ppvObj); \
#ifndef _AFX_NO_NESTED_DERIVATION
#define BEGIN_INTERFACE_PART_DERIVE(localClass, baseClass) \
class X##localClass : public baseClass \
{ \
public: \
#else
#define BEGIN_INTERFACE_PART_DERIVE(localClass, baseClass) \
BEGIN_INTERFACE_PART(localClass, baseClass) \
#endif
#define END_INTERFACE_PART(localClass) \
} m_x##localClass; \
friend class X##localClass; \
展开刚好是一个内部类,这样就省得写IUnknown的三个方法
IUnknown的实现
调用基类的三个方法就可以了
/////////////////////////////////////////////////////////////////////////////
// CDictionaryObj::XSpellCheck
STDMETHODIMP_(ULONG) CDictionaryObj::XSpellCheck::AddRef()
{
METHOD_PROLOGUE_EX_(CDictionaryObj, SpellCheck)
return (ULONG)pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) CDictionaryObj::XSpellCheck::Release()
{
METHOD_PROLOGUE_EX_(CDictionaryObj, SpellCheck)
return (ULONG)pThis->ExternalRelease();
}
STDMETHODIMP CDictionaryObj::XSpellCheck::QueryInterface(
REFIID iid, LPVOID* ppvObj)
{
METHOD_PROLOGUE_EX_(CDictionaryObj, SpellCheck)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
三.引出函数
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllGetClassObject(rclsid, riid, ppv);
}
STDAPI DllCanUnloadNow(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllCanUnloadNow();
}
// by exporting DllRegisterServer, you can use regsvr.exe
STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
COleObjectFactory::UpdateRegistryAll();
return S_OK;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2010-06-09 .net 4.0新特性-延迟初始化:Lazy(转),ThreadLocal<T>
2010-06-09 .net 4.0新特性-并行编程(转)
2010-06-09 .net 4.0新特性-tuple
2009-06-09 show部分书...