私はC#アプリケーションを作成していますが、その効率を上げるためにC++にする必要があります。 C++での関数は次のようにエクスポートされます。C#バーチャルマシンで書込み保護された配列
extern "C" __declspec(dllexport) int fastSegment(char*, int, int);
私は次のようにC#でこの機能をインポート:
私が処理したい画像には、次のように呼ばれている[DllImport(_dllname, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
static private extern bool fastSegment(byte[] img, int width, int height);
:
fastSegment(image, 640, 480);
image
は正しいサイズです。私はメモリを浪費して新しい配列を割り当てたくないので、C++関数で配列を直接変更しました。
どうしますか?死のブルースクリーン。以前はWindows 7でそれを見たことはありませんでした。
私の機能はテスト目的でimage[0]
,image[1]
、image[2]
と書いてありますが、これを削除しても問題ありません。
私の推測では、仮想マシンのメモリを保護していることですが、私はそれが奇妙な私はちょうどそれに書き込むことはできません、または仮想マシンは、単に例外をスローしなかったことを見つけます。そのバッファの保護を解除する方法はありますか?または新しいバッファを割り当てる必要がありますか?
編集:
データ書き込み時にプログラムが実行されます。この突然の墜落の原因は何でしたか?
NTモードのOSでは、ユーザーモードコードではBSODを起動できません。何とかwin32k.sysをクラッシュさせてしまったのだろうか... windbgのカーネルダンプファイルを見ると、このクラッシュについて何か教えてくれるだろう。 (詳細については、これらの用語をgoogleを参照してください) – asveikau