我有一个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 **' 没有可用的用户定义转换运算符 这种转换,或运营商 不能被称为
答案 0 :(得分:1)
此:
m_pIAddressLookup->Gett(postCode, address, recordset);
应该是
m_pIAddressLookup->Gett(postCode, address, &recordset);
(注意&
前面的recordset
- 这意味着“占用地址” - 如果是智能指针,你显然正在使用它会调用重载的operator&()
,这将会给你存储在智能指针内的接口指针的地址。)