发表于: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实例。