如题
我调用com接口的dll,单独调用时没有问题,可是加载到我的程序中时就报错
system("Regsvr32  A.dll");
CoInitialize( NULL );
typedef HRESULT (__stdcall * B)(REFCLSID,REFIID,void**);

CLSID clsid;
HRESULT hr=CLSIDFromProgID(OLESTR("A.Foo"),&clsid);

IElectric *ptr=NULL;
hr = CoCreateInstance(clsid,   NULL,   CLSCTX_ALL,  __uuidof(IFoo), (void   **)&ptr); 
if(FAILED(hr))   
{   
//com组件库加载失败
}
_bstr_t bstr("3");
_variant_t  PatInfo;
ptr->B(1,2,bstr,&PatInfo);//调用接口函数 --------debug到这时就出现题目中的错误
CoUninitialize();

解决方案 »

  1.   

    system("Regsvr32 A.dll");
    没注册成功吧?
    a.dll文件路径有问题
    直接执行你的程序a.dll应该和你的程序在一个目录,
    如果在开发环境下执行, a.dll应该在项目工程目录下
      

  2.   

    if(FAILED(hr))   
    {   
    //com组件库加载失败
    }失败了需要 return 啊
      

  3.   

    system("Regsvr32 A.dll");
    是否注册成功控件CoCreateInstance是否创建实例成功,都需要检查这些地方
      

  4.   

    break at 1st chance C++ exception in debugger, then see call stack
      

  5.   

    inline long IFoo::returnInfo ( long ID, long Type, _bstr_t Number, VARIANT * PInfo ) {
        long _result;
        HRESULT _hr = raw_returnInfo(ID, Type, Number, Info, &_result);//Debug到这时出错 _hr是空的,是-278999.。。的数值
    当_hr是0时程序就没有任何问题
        if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this)); 
        return _result;
    }
    求教如何解决,上面是别的公司delphi写的dll的部分,内部的我也不清楚
      

  6.   

    如果不是你参数有问题,那就是raw_returnInfo函数内部有错误,让写这个的公司改