- PR -

DLLによって確保されたメモリ領域を配列を使って直接読み書きしたい

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)