如何实现向COM +应用程序发送_Recordset **参数

时间:2011-04-18 16:18:09

标签: c++ visual-c++ com dcom

我有一个COM + VB6应用程序,我使用MIDL编译器生成了一个头文件。 标题包含以下定义:

   virtual /* [id] */ HRESULT STDMETHODCALLTYPE Gett( 
    /* [in] */ BSTR sPostCode,
    /* [in] */ BSTR sSurname,
    /* [retval][out] */ _Recordset **__MIDL_0012) = 0;

在我调用此ive导入的c ++客户端调用中

    #import "C:\Program files\Common Files\System\Ado\msado15.dll" 
rename("EOF", "ADOEOF")

然后按如下方式调用GetAddress函数:

void AddressLookup::GetAddress(_bstr_t postCode, _bstr_t address)
{
   ADODB::_RecordsetPtr recordset;
   HRESULT hr = recordset.CreateInstance(__uuidof(ADODB::Recordset));

   m_pIAddressLookup->Gett(postCode, address, recordset);
}

但我一直在解决这个编译错误:

  

AddressLookup.cpp(20):错误C2664:   '_AddressLookup :: Gett':不能   从中转换参数3   'ADODB :: _ RecordsetPtr'到'_Recordset   **'           没有可用的用户定义转换运算符   这种转换,或运营商   不能被称为

1 个答案:

答案 0 :(得分:1)

此:

m_pIAddressLookup->Gett(postCode, address, recordset);

应该是

m_pIAddressLookup->Gett(postCode, address, &recordset);

(注意&前面的recordset - 这意味着“占用地址” - 如果是智能指针,你显然正在使用它会调用重载的operator&(),这将会给你存储在智能指针内的接口指针的地址。)