1

CodeProjectで見つけたビデオからフレームをキャプチャするコードを使用しています

コードは 32 ビットで問題なく動作しますが、64 ビット システムで実行しようとすると問題が発生します。

スローされる例外は、「AccessViolationException: 保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています」です。

私は32ビットと64ビットのプラットフォームでデバッグし、問題がどこにあるかを見つけました-

mediaType = new AMMediaType();

mediaDet.get_StreamMediaType(mediaType);

videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));

2 行目で mediaType の内容を調べたところ、32 を超える 64 ビットでは完全に異なるため、次の行で例外がスローされます (mediaType.formatPtr の値が異なります)。

問題は、2 つのプラットフォーム (4 バイトと 8 バイト) でサイズが異なる "IntPtr" 型にあると思います。この問題を解決する方法がわかりません。

事前に感謝します、リラン。

4

1 に答える 1

1

解決策が見つかりました - 問題は DirectShow DLL 内にあり、FrameGrabber は古いバージョンの dll を参照していました。ダウンロードして参照を最新の DLL に置き換え、問題を解決しました。

リランさん、投稿ありがとうございます。

于 2011-05-04T15:59:26.377 に答える