c++ 调用com的方式

一、在需要的文件中引入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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值