转载请标明是引用于 http://blog.csdn.net/chenyujing1234
例子代码:(包括客户端与服务端)
http://www.rayfile.com/zh-cn/files/de82908f-7309-11e1-9db1-0015c55db73d/
接着我的上一篇文章可连接点对象及示例(一),,接下来我们来创建一个连接点的示例。
1、创建ATL智能设备工程。
在创建完工程后到类视图中右击
此时出现了CProxy_IAddEvents<T>和IAdd
2、为IAdd添加一个Add(int a, int b)方法
3、为_IAddEvents接口添加ExecutionOver(int Result)方法。
该方法来用通知用户已经执行完IAdd接口中的Add方法
接下来试编译一下,发现提示如下错误
1>Add.cpp
1>c:\documents and settings\administrator\桌面\connectioncon\Add.h(73) : error C2039: 'UpdateRegistry' : is not a member of 'CAdd'
1> c:\documents and settings\administrator\桌面\connectioncon\Add.h(29) : see declaration of 'CAdd'
1>c:\documents and settings\administrator\桌面\connectioncon\Add.h(73) : error C2065: 'UpdateRegistry' : undeclared identifier
参考文章http://social.microsoft.com/Forums/fi-FI/windowsembeddedcezhchs/thread/7046a061-daf5-4b28-a738-0b619307403f
后把Add.h里的
#ifndef _CE_DCOM DECLARE_REGISTRY_RESOURCEID(IDR_ADD) #endif
改为
//#ifndef _CE_DCOM DECLARE_REGISTRY_RESOURCEID(IDR_ADD) //#endif
4、修改_IAddEvents的接口定义。
原始的接口被定义为dispInterface,我们需要修改成继承于IUnknown接口,从而减少接口函数的数量。
interface _IAddEvents : IUnknown { [id(1), helpstring("method ExecutionOver")] HRESULT ExecutionOver(int Result); };
5、实现连接点方法.
选中CAdd类,右击,选中添加->添加连接点菜单项.(见上图)
此时出现了上面的类,这个类将关心COM对象如何调用客户端接口。
接下来实现Add方法
STDMETHODIMP CAdd::Add(int a, int b) { // TODO: 在此添加实现代码 // 做一下延迟处理 Sleep(1000); // 触发执行完毕命令 Fire_ExecutionOver(a+b); return S_OK; }
6、发布。自动完成注册.
7、编写客户端来调用带连接点事件的COM
客户端测试后出现如下问题
/*
CoCreateInstance提示找不到接口点
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
待博客更新更修改这个BUG
*/
hr =pAdd.CoCreateInstance(CLSID_Add);
======================
2012-03-25补充以下解决上述BUG方法:
通过regsvrce.exe注册我们的dll.
regsvrce.exe可到我的资源里下载:
<<regsvrce.rar>>
这里还推荐大家参考我的另一篇文章
Windows CE 系统进程外组件应用开发 .