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" 型にあると思います。この問題を解決する方法がわかりません。
事前に感謝します、リラン。