VC中使用com组件的另一种方法

VC中使用com组件的另一种方法

(http://blog.csdn.net/wqf2)

        我们知道在vc中最常用的是通过CoCreateInstance来创建com组件的实例,今天我们介绍另一种更为灵活的方法。
        先看代码:

        HINSTANCE hComInstance = NULL;
	ICalc * pICalc = NULL;
      
         //加载组件
    	hComInstance = CoLoadLibrary(L"CalcAtlCom.dll",FALSE);
	if (hComInstance != NULL)
	{
		IClassFactory * pIFactory = NULL;
		HRESULT hr = CoGetClassObject(CLSID_Calc,CLSCTX_INPROC_SERVER,NULL,IID_IClassFactory,(void**)&pIFactory);
		if (SUCCEEDED(hr))
		{
			hr = pIFactory->CreateInstance(NULL,IID_ICalc,(void**)&pICalc);
			pIFactory->Release();
		}
	}


         //使用组件,调用pICalc接口的Add方法完成加法操作。
         if (pICalc != NULL)
	{
		long lResult = pICalc->Add(3,5);
		CString strMsg;
		strMsg.Format("3+5=%d",lResult);
		AfxMessageBox(strMsg);
	}

         //释放组件
         if (hComInstance != NULL)
	{
		if (pICalc != NULL)
		{
			pICalc->Release();
			pICalc = NULL;
		}
		CoFreeLibrary(hComInstance);
	}


        简单介绍一下代码,在加载组件的时候通过CoLoadLibrary把组件库加载到内存,然后通过CoGetClassObject可以创建组件工厂,最后通过组件工厂的CreateInstance方法来创建组件的实例。在释放组件时,先释放组件实例,然后通过CoFreeLibrary释放组件库。
        之所以说这样写比较灵活,主要应用一下几个情况:
        1.当想要创建一个组件库中多个组件的实例时,只创建一个组件工厂实例,就可以通过多次调用组件工厂的CreateInstance方法,来依次创建各组件的实例。这样做可以获得更好的效率。而用CoCreateInstance来创建,每调用一次就会创建一个组件工厂,有些浪费。
        2.当想使用许可或权限访问组件的高级属性时,只需要将IClassFactory换成IClassFactory2即可。IClassFactory2从IClassFactory继承,多了GetLicInfo,RequestLicKey,CreateInstanceLic几个方法,来传入正确的密钥或许可证来合法访问组件。而用CoCreateInstance无法满足这方面的要求。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值