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