1

ReadSample 呼び出しから E_POINTER エラーが発生しましたが、私が知る限り、無効なポインターはありません。以下のスニペットを参照してください (注、これは C++/CLI アプリです)。

IMFSample* sample = NULL;
pin_ptr<IMFSample*> pinnedSample = &sample;

LONGLONG timeStamp;

HRESULT hr = mSourceReader->ReadSample(
    (DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,
    0,
    NULL,
    NULL,
    &timeStamp,
    pinnedSample
    );

問題は mSourceReader (IMFMediaSource から作成された IMFSourceReader インスタンス) の構築にあると思われます。しかし、残念ながら、mSourceReader を作成したコマンド チェーン内のすべての COM 呼び出しが S_OK を返したため、バックトラックしてソースを見つける方法がわかりません。

ヒントをありがとう。

4

1 に答える 1

1

pin_ptrガベージ コレクターがローカル変数を移動することはないため、ローカル変数のアドレスを取得する場合は必要ありません。

NULL を渡す他の 3 つのパラメーターの 1 つはオプションではないと思いますが、確実に知るには、呼び出している関数を確認する必要があります。

IMFSourceReaderを同期モードまたは非同期モードで作成しましたか? ドキュメントは言う:

このメソッドは、同期または非同期で完了できます。ソース リーダーを作成するときにコールバック ポインターを指定すると、メソッドは非同期になります。それ以外の場合、メソッドは同期的です。

これがあなたの問題だと思います:

同期モード:

  • pdwStreamFlags および ppSample パラメータを NULL にすることはできません。それ以外の場合、メソッドは E_POINTER を返します。

に NULL を渡しましたがpdwStreamFlags、これは許可されていません。

ドキュメント リンク: http://msdn.microsoft.com/en-us/library/dd374665.aspx

于 2011-05-09T04:12:51.077 に答える