私のアプリケーションでは、オブジェクトAを作成します。これは、両方を介してオブジェクトBを作成しますCreateInstance
。両方のオブジェクトは同じプロセスに存在する必要があります。
これで、オブジェクトBが特定のインターフェイスを要求されると、COM_MAPで定義したにもかかわらず、E_NOINTERFACEを返していることがわかります。
class B:
{
// ....
BEGIN_COM_MAP(B)
COM_INTERFACE_ENTRY(IB)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IXXX) // the interface I'm interested in
END_COM_MAP()
// .....
};
そしてAコード:
#define FORWARD_ERROR( expr ) { hr=expr; if( !SUCCEEDED( hr ) ) return hr;}
IBPtr b;
FORWARD_ERROR( b.CreateInstance( __uuidof( B ), 0, CLSCTX_INPROC_SERVER ) );
IXXXPtr x;
HRESULT hrIf = b.QueryInterface( __uuidof( IXXX ), x );
// ===> now x is NULL, and hrIf contains E_NOINTERFACE
これをデバッグし、COM_MAPにブレークポイントを設定すると、最下部のフレームにソースコードが表示されませんが、いくつかのole32.dllが表示されCRpcThread::WorkerLoop
ます。
QueryInterface
OLEとRPCを介して呼び出す必要があることをどのように示したかわかりません。何か案は?