Как реализовать отправку параметра _Recordset ** в приложение COM + - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть приложение COM + VB6, я сгенерировал файл заголовка с помощью компилятора MIDL. Заголовок содержит следующее определение:

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

В моем клиентском вызове 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 Ответ

1 голос
/ 19 апреля 2011

Это:

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

должно быть

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

(примечание & перед recordset - это означает «получить адрес» - в случае использования интеллектуального указателя, который вы, очевидно, используете, вызов будет перегружен operator&(), и это даст вам адрес указатель интерфейса хранится внутри интеллектуального указателя).

...