VC调用COM组件的几种方式

这个网上都有现成的,我就不说原创了,否则就太没脸了,但是经过笔者的测试,都成为可用的。尽可能的写成傻瓜式的教程,让大家都有些成就感的同时学到东西

现在说明下环境WIN7+VS2010,我的com组件是Dic.dll,内含接口是IDicCtrl

第一种是智能指针:


#import "D:\project\Dic\Debug\Dic.dll" no_namespace//记得加入这一句
//初始化COM环境
	::CoInitialize(NULL);
	IDicCtrlPtr ptr;
	HRESULT hr=ptr.CreateInstance(__uuidof(DicCtrl));
	ptr.Release();
	cout<<"方法一已成功\n";
	
	::CoUninitialize();

第二种是加入编译器自己生成的Dic_i.c和Dic_i.h文件


#include"D:\project\Dic\Dic\Dic_i.h"
#include"D:\project\Dic\Dic\Dic_i.c"


::CoInitialize(NULL);
IDicCtrl* pTest=NULL;
HRESULT hr=::CoCreateInstance(CLSID_DicCtrl,NULL,CLSCTX_ALL,IID_IDicCtrl,(void**)&pTest);
if(S_OK!=hr)
	{
		;
	}
pTest->Release();
cout<<"方法二已经成功\n";
::CoUninitialize();

第三种的准备环节和第二种是一样的,加入编译器自动生成的*_i.h和*_i.c文件

//初始化COM环境
	::CoInitialize(NULL);
	IClassFactory *pcf=NULL;
	HRESULT	hr = CoGetClassObject(CLSID_DicCtrl, CLSCTX_ALL, NULL, IID_IClassFactory, (void**)&pcf);
	if (SUCCEEDED(hr) && (pcf != NULL))
	{
		IDicCtrl* pFoo = NULL;
		hr = pcf->CreateInstance(NULL, IID_IDicCtrl, (void**)&pFoo);
		if (SUCCEEDED(hr)  && (pFoo != NULL))
		{
			
			pFoo->Release();
		}
		pcf->Release();
		::CoUninitialize();
		return 0;
	}
通过程程DicCtrl的类厂对象,然后再去生成IDicCtrl的接口指针,进行调用。

今天就先写到这儿吧。嗯。还有别的,但是笔者还是不太理解,就先不写了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值