一、初始化函数:
1、CoBuildVersion 获取COM库的版本号。COM库也是在不断的升级的,这样会出现不同的版本号,当客户程序想要获取COM库的新功能和性能时必须要进行版本的检查,版本号分为主版本号和次版本号,主版本号放在返回值的高16位,次版本放在低16位。一般只要比较主版本号就可以了。
2、CoInitialize COM库的初始化。COM库只有初始化后才可以使用,CoInitialize有一个参数,一个IMalloc的内存接口器,用于COM库内存的分配管理工作,如果CoInitialize参数指定为NULL,则由系统提供默认的管理器。CoInitialize返回三种值:S_OK 初始化成功,S_FALSE COM库已经在线程当中初始化了,RPC_E_CHANGE_MODE 初始化失败。
3、CoUninitialize COM库功能服务终止。当调用CoUninitialize时,CoUninitialize所在的DLL也将终止服务退出内存。CoUninitialize与CoInitalize配套使用。
4、CoFreeUnusedLibraries 自动释放不再使用的DLL。注意,当调用CoFreeUnusedLibraries时,所调用的DLL并不是立即就退出的,而是要有一定的延迟。这是因为当有多个线程运行时,线程之间会因为争夺资源而产生某一线程暂停,CoFreeUnusedLibraries会误以为这是不再使用的线程,所以会去释放它,而实际它只是暂停而已。所以CoFreeUnusedLibraries一般会有十分钟的延迟时间。解决方法就是在代码里设置一个定时器,定时有调用CoFreeUnusedLibraries。
二、跟GUID有关的函数:
1、IsEqualGUID/IsEqualIID/IsEqualCLSID/三个函数分别是判断两个GUID/IID/CLSID是否相等。
2、CLSIDFromProgID 根据ProgID的值在注册表里找到对应的CLSID的值,ProgID是为了方便记忆CLSID而取一个字符串名字。
3、StringFromClSID 把CLISD的结构形式转换成字符串的形式。
三、对象创建函数:
1、CoGetClassObject 获得对象的类厂。
2、CoCreateInstance 创建COM对象。CoCreateInstance其实是对COM对象创建过程的封装。其过程是这样的:a.客户程序调用CoCreateInstance函数 b.CoCreateInstance函数调用CoGetClassObject函数 c.客户程序调用CoInitialize初始化COM库,COM库开始运行。d.COM库找到组件程序DLL,并进入它。e.在组件DLL里调用DLLGetClassObject函数,这个函数用于创建类厂,创建完类厂后把类厂对象的指针返回给CoGetClassObject函数。f.CoGetClassObject函数把类厂指针返回给CoCreateInstance函数,然后它调用类厂对象创建函数。g.类厂创建COM对象。h.类厂把COM对象返回给CoCreateInstance函数,CoCreateInstance函数返回。i.客户程序直接调用COM对象。
3、CoCreateInstanceEx 创建COM对象,可指定多个接口或远程对象,这是为了避免客户程序与COM组件的频繁交互。这个函数用于组件外调用。
4、CoRegisterClassObject
注册一个类厂接口,类厂接口是组件程序一启动就创建好了的,无论客户程序是否调用。
5、CoRevokeClassObject 与CoRegisterClassObject配套使用。
6、CoDisconnectObject 断开其它应用程序与对象的连接。
三、内存管理函数:
1、CoTaskMemAlloc 内存分配函数.当客户程序调用COM组件的一个功能接口时,如果这个接口函数的参数有[out]的参数,并且这个参数不是整形或浮点形时就要调用这个函数来审请一块内存。
2、CoTaskMemRealloc 重新分配内存。
3、CoTaskMemFree 与CoTaskMemAlloc函数配套使用。
4、CoGetMalloc 获取COM库的内存管理器接口。