0

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

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

在我的 C++ 客户端调用中调用这个 ive 导入

    #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 ** ' 没有可以执行此转换的用户定义转换运算符,或者无法调用运算符

4

1 回答 1

1

这个:

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

应该

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

(注意&前面recordset- 它的意思是“获取地址” - 如果您显然使用智能指针,这将调用重载operator&(),这将为您提供存储在智能指针内的接口指针的地址)。

于 2011-04-19T05:25:13.397 回答