0

次のようなコールバック インターフェイスを実装する ATL インプロセス サーバーがあります。

.idl

interface IClientEvents : IUnknown{
    [] HRESULT TestEvent(void);
};

interface IATLSimpleObject : IDispatch{

    [id(1)] HRESULT Advise([in] IClientEvents* clientEvents);
    [id(2)] HRESULT Unadvise(void);
};

.h

private:
    IClientEvents* m_ClientEvents;
public:
    STDMETHOD(Advise)(IClientEvents* clientEvents);
    STDMETHOD(Unadvise)(void);

.cpp

STDMETHODIMP CATLSimpleObject::Advise(IClientEvents* clientEvents)
{
    m_ClientEvents = clientEvents;
    m_ClientEvents->AddRef();

    return S_OK;
}

STDMETHODIMP CATLSimpleObject::Unadvise(void)
{
    m_ClientEvents->Release();
    m_ClientEvents = NULL;

    return S_OK;
}

C# クライアント

public partial class Form1 : Form, ATLProject1Lib.IClientEvents
{
    private ATLProject1Lib.ATLSimpleObject ATLSimple = new ATLProject1Lib.ATLSimpleObject();

    private void Form1_Shown(object sender, EventArgs e)
    {
        ATLSimple.Advise(this);
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        ATLSimple.Unadvise();
    }

正常に動作しますが、アウトプロセス サーバーでもまったく同じことを行う必要がありますが、実行時に「ATLSimple.Advise(this)」を呼び出すと、「Interface not Registered」(80040105) エラーが発生します。

同様の問題を探すのに何時間も費やしましたが、何も見つかりません。どんな助けでも大歓迎です。

4

1 に答える 1