vc 如何调用exe形式的com

来源:百度知道 编辑:UC知道 时间:2024/05/22 13:29:43
有一exe形式的COM,应该如何调用它?没有其他的文件了
我得没有dll文件,没有.h和.i_c文件。我使用import是出现com内重载错误。error C2556: 'long __thiscall IModule::GetPadData(void)' : overloaded function differs only by return type from 'class _com_ptr_t<class _com_IIID<struct IPadData,&struct __s_GUID _GUID_97f
f1354_fd61_4339_94c9_b36691410c4e> > __thiscall IModule::GetPadData(void)'

COM服务器为进程内服务器,DLL名为simpCOM.dll,该组件只有一个接口IFoo,该接口只有一个方法HRESULT SayHello(void)

在SDK中调用
=====================================
一、最简单最常用的一种,用#import导入类型库,利用VC提供的智能指针包装类
演示代码:

#import "D:\Temp\vc\simpCOM\Debug\simpCOM.dll" no_namespace
CoInitialize(NULL);

IFooPtr spFoo = NULL;
spFoo.CreateInstance(__uuidof(Foo));
spFoo->SayHello();
spFoo.Release();/*晕死了,本来智能指针就是为了让用户不用关心这个的,可是我发现如果不手工调用一下的话,程序退出后会发生内存访问错误,我是在console中做试验的,哪位大侠知道怎么回事请一定指教*/
CoUninitialize();

二、引入midl.exe产生的*.h,*_i.c文件,利用CoCreateInstance函数来调用

演示代码:
/*在工程中加入*_i.c文件,例如本例的simpCOM_i.c,该文件定义了类和接口的guid值,如果不引入的话,会发生连接错误。*/

#include "D:\Temp\vc\simpCOM\simpCOM.h"
CoInitialize(NULL);

IFoo* pFoo = NULL;
HRESULT hr = CoCreateInstance(CLSID_Foo, NULL, CLSCTX_ALL, IID_IFoo, (void**)&pFoo);
if (SUCCEEDED(hr) && (pFoo != NULL))
{
pFoo-&g