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

现在说明下环境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的接口指针,进行调用。

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