0
我有一个COM + VB6应用程序,我使用MIDL编译器生成了一个头文件。 头包含了以下定义:如何实现将_Recordset **参数发送给COM +应用程序
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) : error C2664: '_AddressLookup::Gett' : cannot convert parameter 3 from 'ADODB::_RecordsetPtr' to '_Recordset ** ' No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
我得到一个异常:AddressLookup.cpp(20):错误C2664: '_AddressLookup :: GETT':不能用 从转换参数3 '_com_ptr_t <_IIID> ::接口**' 到 '_Recordset **' [ _IIID = _com_IIID ] 指向的类型是不相关的;转换需要reinterpret_cast,C风格转换或函数风格转换' –
Alan
2011-04-20 09:04:25
@Alan:这不是一个例外,这是一个编译错误。问题与命名空间有关。包含'_Recordset'定义的名称空间是什么? – sharptooth 2011-04-20 10:24:24