客户程序通过COM库访问组件程序(如:OPC 服务器)的步骤 点击:698 | 回复:0



opcfan

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:62帖 | 58回
  • 年度积分:0
  • 历史总积分:667
  • 注册:2004年9月29日
发表于:2007-02-12 12:03:00
楼主
(1)在进行函数调用以前,必须调用COM库的初始化函数:HRESULT= CoInitialize(NULL);
(2)通过函数CLSIDFromProgID()或CLSIDFromProgIDEx()ProgID,查找注册表中相关组件的CLSID。
(3)客户端程序调用CoCreateInstance(),创建COM对象,传递组件对象类的CLSID以及所要接口的IID。
(4)COM库在HKEY_CLASSES_ROOT\CLSID.键值下查找服务器的CLSID键值,这个键值包含服务器的注册信息。
(5)COM库读取服务器的全路径并将组件程序加载。
(6)COM库为组件对象类请求类工厂。COM库在类工厂中调用CreateInstance()方法创建客户端程序请求的COM对象。
(7)CreateInstance()返回一个接口指针给客户端程序。
为了创建COM对象并从这个对象获得接口,必须调用COM库的API函数,CoCreateInstance()。其原型如下[38]:
HRESULT CoCreateInstance(
REFCLSID    rclsid,
LPUNKNOWN pUnkOuter,
DWORD      dwClsContext,
REFIID       riid,
LPVOID*     ppv );
以下是参数解释:
rclsid:coclass的CLSID
pUnkOuter:这个参数只用于COM对象的聚合,利用它向现有的coclass添加新方法。参数值为null表示不使用聚合。
dwClsContext:表示所使用COM服务器的种类。一个进程内(in-process)DLL传递的参数值为CLSCTX_INPROC_SERVER。
riid:请求接口的IID。
ppv:接口指针的地址。COM库通过这个参数返回请求的接口。当调用CoCreateInstance()时,它负责在注册表中查找COM服务器的位置,将服务器加载到内存,并创建你所请求的coclass实例。


热门招聘
相关主题

官方公众号

智造工程师