0

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** ' に変換できません ** ' この変換を実行できるユーザー定義変換演算子がありません。オペレーターを呼び出すことができません

4

1 に答える 1

1

これ:

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

する必要があります

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

&(前に注意してくださいrecordset-「アドレスを取得する」を意味します-明らかに使用しているスマートポインターの場合、これはオーバーロードされて呼び出さoperator&()れ、スマートポインター内に格納されているインターフェイスポインターのアドレスが得られます)。

于 2011-04-19T05:25:13.397 に答える