VC下MFC,调用Com类型库遇到的问题的解决

来源:互联网 发布:笔袋淘宝 编辑:程序博客网 时间:2024/05/24 03:29

VC建立一个对话框程序,引入Com类型库。Vs2010环境。首先,选项目打开类向导。


选择“添加类”后的下拉小三角,里面有添加类型库里的MFC类,选择相应的Com类型库就生成了对应的MFC类,

在对话框类中直接调用生成的类。

CComLib Com1;

       Com1.XXX();

       Com1.XXX();

调用后发现根本没有任何反映,什么原因呢后来发现原来需要实例化一下。

     需要先调用Com1.CreateDispatch(Guid_Test);

DEFINE_GUID( GUID_BUS_TYPE_PCMCIA, 0x09343630L, 0xaf9f, 0x11d0, ...)

     CComLib Com1;

if (   Com1.CreateDispatch(GUID_BUS_TYPE_PCMCIA))

{


       Com1.XXX();

       Com1.XXX();

}


结果又遇到一下错误:

LNK2001 unresolved external" by using DEFINE_GUID


干脆直接定义GUID

      GUID _myGuid;

    _myGuid.data1=0x1234123;

   _myGuid.data2=0x1234123;

   _myGuid.data3=0x1234123;

  _myGuid.data4[0]=0x1234123;

        ....

        ....

if (Com1.CreateDispatch(_myGuid)

{

}

终于完成调用通过, 测试也通过。

然后移到对话框类外,在App::InitInstance()中调用,又发现Com异常。

原来需要初始化Com环境。而对话框类自动初始化了。所以还要加上Com初始化函数

::CoInitialize(NULL);

结束时

 ::CoUninitialize();

结果调用有发现异常。以为Com必须要有个主窗口句柄才能使用。后经调试发现,原来调用时输入的数据参数有问题,Com组件自身扔出异常,加

try

{

 CComLib Com1;

if (   Com1.CreateDispatch(GUID_BUS_TYPE_PCMCIA))

{

       Com1.XXX();

       Com1.XXX();

}

else{

return "加载相应的com类型库失败";

}


}catch{...}

{

  return false;

}

一切OK了。