近来学习 com技术,觉得可连接对象实现起来很难.经过拜读潘老师的书籍,用ATL写出了一个简单例子:
一 com组件方:
声明要实现的可连接对象
[
uuid(87EA0963-F479-4ABC-95DD-DF0F081B73D2),
helpstring("LJ Class")
]
interface _IWLEvents:IUnknown
{
[ helpstring("method tongku")] HRESULT JINGJING();
};
在类中声明
coclass LJ
{
[default] interface ILJ;
[source] interface _IWLEvents;
};
下一步用ATL生成可连接对象,ATL自动生成了 函数JINGJING 的激活方式,如下所示:
class CProxy_IWLEvents : public IConnectionPointImpl<T, &IID__IWLEvents, CComDynamicUnkArray>
{
//Warning this class may be recreated by the wizard.
public:
HRESULT Fire_JINGJING()
{
HRESULT ret;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
int nConnections = m_vec.GetSize();
//遍历所以连接上来的客户端
for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
_IWLEvents* p_IWLEvents = reinterpret_cast<_IWLEvents*>(sp.p);
if (p_IWLEvents != NULL)
ret = p_IWLEvents->JINGJING(); //调用客户端程序,和客户端发生关联
} return ret;
}
};
二 客户端
在客户端用一个对话框程序实现,首先要实现接口IWLEvents的类
class CIWL:public _IWLEvents
{
STDMETHODIMP QueryInterface (REFIID iid,LPVOID *pp)
{
*pp =this;
return S_OK;
}
STDMETHODIMP_(ULONG) AddRef()
{
return 2;
}
STDMETHODIMP_(ULONG) Release ()
{
return 1;
}
STDMETHODIMP JINGJING()
{
AfxMessageBox(“返回到客户端“);
return 1;
}
};
用一个button事件实现调用过程:
void CShowDlg::OnButton1()
{
CoInitialize(NULL);
ILJ * p;
IConnectionPointContainer * pContainer=NULL;
IConnectionPoint *pPoint = NULL;
HRESULT hr = CoCreateInstance(CLSID_LJ,NULL,CLSCTX_INPROC_SERVER , IID_ILJ,(void**)&p );
if(SUCCEEDED(hr))
{
p->QueryInterface(IID_IConnectionPointContainer,(void**)&pContainer);
if(SUCCEEDED(hr))
{
hr = pContainer->FindConnectionPoint(IID__IWLEvents, &pPoint);
if(SUCCEEDED(hr))
{
DWORD dwCookie;
CIWL * m_pDuckInt = new CIWL ;
hr =pPoint->Advise(m_pDuckInt,&dwCookie);
if(SUCCEEDED(hr))
{
p-> Fire() ;
pPoint->Release();
}
pPoint->Unadvise(dwCookie);
}
CoUninitialize();
}
本人是新手,希望各位老鸟们多多指教阿
com可连接对象的实现
博主学习COM技术时,觉得可连接对象实现困难。通过阅读潘老师书籍,用ATL写出简单例子,包括COM组件方声明可连接对象、用ATL生成激活方式,以及客户端用对话框程序实现接口、用按钮事件调用过程,最后博主希望得到老鸟指教。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
ACE-Step
音乐合成
ACE-Step
ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

被折叠的 条评论
为什么被折叠?



