#import "../ATLMFC/Debug/ATLMFC.dll" no_namespace
void Fun()
{
CoInitialize(NULL);

HRESULT hr;
IUnknown *pUnKnown=NULL;
ISimple *pSimple=NULL; CLSID clsid;
hr=CLSIDFromProgID(L"ATLMFC.Simple",&clsid);
hr=CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IUnknown,(void **)&pUnKnown); hr=pUnKnown->QueryInterface(_uuidof(ISimple),(void **)&pSimple); //此处接口查询成功
if (SUCCEEDED(hr))
{
int num=0;
pSimple->Add(10,20,&num); //此处报错,报错如下
std::cout<<num<<std::endl;
pSimple->Release();
}
}error C2660: 'Add' : function does not take 3 parameters
我的COM服务器中Add函数明明是3个参数(整数的加法),为什么报这种错???

解决方案 »

  1.   

    看看import生成的.h,估计是 int Add(int, int)
      

  2.   

    import生成的.h文件在那个地方?好像没有啊
      

  3.   

    第三个参数是不是out属性?
    如果是的话,会当做返回值的
      

  4.   

    说错了,是不是[out, retral]属性?
      

  5.   

    [in]int a,[in]int b,[out,retval]int *c
      

  6.   

    不用import而采用如下方式则正确
     #include "../ATLMFC/ATLMFC.h"
     #include "../ATLMFC/ATLMFC_i.c"
    请问这是什么原因???
    这个问题我遇到好几次
      

  7.   

    使用COM组件的方式中,import有两种方法
    #import "组件所在目录myCom.dll" no_namespace

    #import "类型库所在目录myCom.tlb"
    using namespace MYCOM; //为什么这里报错error C2871: 'MYCOM' : does not exist or is not a namespace
      

  8.   

    编译器说得很白了,因为你的名字空间不是'MYCOM',从字面猜测是不是"ATLMFC"?看看你的typelib是什么名字 
    默认import导出接口是有封装的,想要纯的要raw_interfaces_only 
    #import "../ATLMFC/Debug/ATLMFC.dll" no_namespace raw_interfaces_only 学C++,永远要学好怎么查资料
    可以参考
    http://msdn.microsoft.com/en-us/library/8etzzkb6(v=vs.80).aspx
    http://msdn.microsoft.com/en-us/library/298h7faa(v=vs.80).aspx