これは本当に頭が痛くなり始めています:(
相互運用しようとしているアンマネージ DLL がありますが、うまくいきません。アプリケーションが動作することもありますが、ほとんどの場合、ランダムに AccessViolationException が発生し、恐ろしくクラッシュします。
単一の DllImport の取り扱いミスに絞り込んだと思います。
C++ 関数:
HTMLRENDERERDLL_REDIST_API void SetDataBuffer( int windowHandle, unsigned char* dataSource, int format, int stride, int totalBufferSize );
C# DllImport:
[DllImport("MyDll.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
static private extern unsafe void SetDataBuffer(Int32 windowHandle, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] dataSource, Int32 format, Int32 stride, Int32 totalBufferSize);
上記の関数への呼び出し:
var buffer = new byte[windowWidth * windowHeight * bytesPerPixel];
SetDataBuffer(windowHandle, buffer, (Int32)0, (Int32)(windowWidth * bytesPerPixel), (Int32)(windowWidth * windowHeight * bytesPerPixel));
これに明らかに間違っていることはありますか?私はそれdataSource
が原因だと思いますが...それを証明する方法がわかりません!
ありがとう