在編寫組件程序時,經常會使用CoCreateInstance直接取COM組件的接口,非常方便,那CoCreateInstance到底幹了些什麼事呢?1、CoCreateInstance取COM組件的接口的基本流程
//參數:rclsid = 組件CLSID
//參數:riid = 接口ID
WINOLEAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter,
DWORD dwClsContext, REFIID riid, LPVOID FAR* ppICOMInterface)
{
//根據組件的CLSID從註冊表中取Dll的地址,並加載
char pszCOMDllPath;
SHGetValue(HKEY_CLASSES_ROOT, "CLSID+rclsid\InprocServer32", "默認", pszCOMDllPath);
LoadLibrary(pszCOMDllPath);
//調用DllGetClassObject,創建IID_IClassFactory總接口
IClassFactory* pIFactory;
DllGetClassObject(rclsid, IID_IClassFactory, &pIFactory);
{
IClassFactory* pITotalFactory = new IClassFactory;
pITotalFactory->QueryInterface(IID_IClassFactory, &pIFactory);
}
//調用CreateInstance創建COM總接口對象
pIFactory->CreateInstance(pUnkOuter, riid, ppICOMInterface);
{
ICOMInterface* pITotalCOMInterface = new ITotalCOMInterface;
//根據接口IID取指定接口對象
pITotalCOMInterface->QueryInterface(riid, ppICOMInterface);
}
}