一、在需要的文件中引入com对应的dll文件
#import "../bin/FirstCOM.dll" no_namespace
在调用的地方
CoInitialize(NULL);
IFirstClassPtr m_FirstClass;
HRESULT hr = S_OK;
hr = m_FirstClass.CreateInstance(__uuidof(FirstClass));
if(hr==S_FALSE||NULL==m_FirstClass)
{
AfxMessageBox(_T("初始化失败!"));
}
else
{
long result=0;
m_FirstClass->Add(4,5,&result);//引入com中的函数
CString str;
str.Format(_T("4+5=%ld"),result);
AfxMessageBox(str);
}
m_FirstClass.Release();//释放资源
m_FirstClass=NULL;
CoUninitialize();
二、引入FirstCOM.dll产生的*.h,*_i.c文件,利用CoCreateInstance函数来调用
演示代码:
/*在工程中加入*_i.c文件,例如本例的FirstCOM_i.c,该文件定义了类和接口的guid值,如果不引入的话,会发生连接错误。*/
#include "FirstCOM_i.h"
CoInitialize(NULL);
IFirstClass* m_FirstClass = NULL;
HRESULT hr = CoCreateInstance(CLSID_FirstClass, NULL, CLSCTX_ALL, IID_IFirstClass, (void**)&m_FirstClass);
if (SUCCEEDED(hr) && (m_FirstClass != NULL))
{
long result=0;
m_FirstClass->Add(4,5,&result);
CString str;
str.Format(_T("4+5=%ld"),result);
AfxMessageBox(str);
}
CoUninitialize();
三、不用CoCreateInstance,直接用CoGetClassObejct得到类厂对象接口,然后用该接口的方法CreateInstance来生成实例。
演示代码:
/*前期准备如二方法所述*/
IClassFactory* pcf = NULL;
HRESULT hr = CoGetClassObject(CLSID_FirstClass, CLSCTX_ALL, NULL, IID_IClassFactory, (void**)&pcf);
if (SUCCEEDED(hr) && (pcf != NULL))
{
IFirstClass* m_FirstClass = NULL;
hr = pcf->CreateInstance(NULL, IID_IFirstClass, (void**)&m_FirstClass);
if (SUCCEEDED(hr) && (m_FirstClass != NULL))
{
long result=0;
m_FirstClass->Add(4,5,&result);
CString str;
str.Format(_T("4+5=%ld"),result);
AfxMessageBox(str);
}
pcf->Release();
}
四、
在MFC中除了上面的几种方法外,还有一种更方便的方法,就是通过ClassWizard利用类型库生成包装类,不过有个前提就是com组件的接口必须是派生自IDispatch
具体方法:
1、按Ctrl+W调出类向导,按Add Class按钮弹出新菜单,选From a type libarary,然后定位到FirstCOM.dll,接下来会出来该中的所有接口,向导会自动生成相应的.cpp和.h文件.
这样你就可以在你的MFC工程中像使用普通类那样使用COM组件了.
演示代码:
CoInitialize(NULL);
CFirstClass m_FirstClass;
if (m_FirstClass.CreateDispatch(_T("FirstCOM.FirstClass.1")) != 0)
{
long result=0;
m_FirstClass.Add(4,5,&result);
CString str;
str.Format(_T("4+5=%ld"),result);
AfxMessageBox(str);
}
CoUninitialize();
代码资源:http://download.csdn.net/detail/angellove156/7336167