- - PR -
DLLによって確保されたメモリ領域を配列を使って直接読み書きしたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-10-08 17:40
例えば下記のプログラムで、byte[][]配列を割り当てる方法が分かりません。
unsafeコードでも構いません。 // // 課題 下記の???と記述された部分を書き足す // using System; using System.Runtime.InteropServices; // public class Class1 { // メモリ確保 Size=確保バイト数、Number=識別ID(開放時に識別するため) [DllImport("test.dll")] public static extern byte* GetMem(uint Size,out uint Number); // メモリへの書き込み [DllImport("test.dll")] public static extern void WriteMem(uint Number); // メモリ開放 Number=識別ID [DllImport("test.dll")] public static extern void FreeMem(uint Number); // その他test.dllによる操作 … } public class Class2 { public void test() { // STEP1 メモリ確保 uint num1; uint num2; uint num3; byte* ptr1 = Class1.GetMem(1000000,out num1); byte* ptr2 = Class1.GetMem(2000000,out num2); byte* ptr3 = Class1.GetMem(3000000,out num3); // STEP2 メモリへの書き込み Class1.WriteMem(num1); Class1.WriteMem(num2); Class1.WriteMem(num3); // STEP3 書き込み結果の参照 // ジャンク配列を使ってGetMemで確保した領域を直接読み書きしたい byte[][] buff = new byte[3]; // // ***** 下記の???部分の記述方法が分かりません ***** // buff[0] = ??? // ptr1を先頭アドレスにして、byte[1000000]長分を割り当てたい buff[1] = ??? // ptr2を先頭アドレスにして、byte[2000000]長分を割り当てたい buff[2] = ??? // ptr3を先頭アドレスにして、byte[3000000]長分を割り当てたい // STEP4 メモリ開放 Class1.FreeMem(num1); // DLL領域としての開放 Class1.FreeMem(num2); // DLL領域としての開放 Class1.FreeMem(num3); // DLL領域としての開放 buff = new byte[0][]; // 配列としての開放 } } |
1