カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

RunningObjectTable

ランニングオブジェクトテーブルにグラフを登録することで、動作中のグラフがGraphEditで表示できるようになります。

以下に登録用コードを示します。第1引数にIGraphBuilderへのポインター、第2引数に登録IDへのポインターを指定します。

HRESULT AddToRot(
    IUnknown    *pUnkGraph,
    DWORD       *pdwRegister)
{
    IMoniker * pMoniker;
    IRunningObjectTable *pROT;

    if (FAILED(GetRunningObjectTable(0, &pROT)))
    {
        return E_FAIL;
    }
    WCHAR wsz[256];
    wsprintfW(
        wsz,
        L"FilterGraph %08p pid %08x",
        (DWORD_PTR)pUnkGraph,
        GetCurrentProcessId());
    HRESULT result = CreateItemMoniker(L"!", wsz, &pMoniker);

    if (SUCCEEDED(result))
    {
        result = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
        pMoniker->Release();
    }
    pROT->Release();
    return result;
}

以下に削除用コードを示します。引数にAddToRot()関数で登録したIDを指定します。

void RemoveFromRot(DWORD pdwRegister)
{
    IRunningObjectTable *pROT;

    if (SUCCEEDED(GetRunningObjectTable(0, &pROT)))
    {
        pROT->Revoke(pdwRegister);
        pROT->Release();
    }
}

AddToRot()関数を実行した後、GraphEditの「Connect to Remote Graph...」で開いたダイアログから目的のpidを選択します。

アプリケーションで作成したグラフはGraphEditで変更しないで下さい。デバッグが継続できなくなったり、GraphEditが異常終了する場合があります。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ