Archive for 9月 5th, 2015

IStreamクラスの謎

土曜日, 9月 5th, 2015

おはようございます。

Visual C++2015のデバッグ中に画像の例外発生!!!!なぜじゃ?

無題

発生する部分 IStreamクラスでなにかが起こっている。ちなみに
コケル部分は以下の通り…

IStream *stream;

stream->Write(tv, (ULONG)p3.QuadPart, &hh);

DX::ThrowIfFailed(// ここで例外
    m_wicFactory->CreateDecoderFromStream(
        stream,
        nullptr,
        WICDecodeMetadataCacheOnDemand,
        &decoder));

ところが全く同じロジックを使っているルーチンでは例外発生が起きずに無事に動いている…なぜじゃ?ということで試行錯誤して、ストリームの考え方から言って、ストリームのシークポインタがおかしいのか?と思って、例外のシークポインタを強制的にリセットしてやった。

IStream *stream;

stream->Write(tv, (ULONG)p3.QuadPart, &hh);
stream->Seek(p, STREAM_SEEK_SET, &p2);//<-追加

DX::ThrowIfFailed(
m_wicFactory->CreateDecoderFromStream(
stream,
nullptr,
WICDecodeMetadataCacheOnDemand,
&decoder));

ということで、無事に動いた(^_^)v

Web上のサンプルプログラムはエラーの出るやつなのですが、なぜ?こういう現象が起こるんだろうか?謎?????

ということで、念のために、エラーの発生しない全く同じロジックにも安全のため同じシークをリセットするルーチンを追加しよう.

これ半日悩んだ….orz..、