void 型パラメーターを使用して 2 つのメソッドを作成しました。
procedure Method1(const MyVar; size: cardinal);
var
Arr: array of byte;
begin
SetLength(Arr, size);
{now copy the data from MyVar to Arr, but how?}
end;
procedure Method2(var MyVar; size: cardinal);
var
Arr: array of byte;
begin
SetLength(Arr, size);
{return the data from the array, but how?}
end;
最初のものでは、バイトの配列として MyVar にアクセスしたいと思います。2 つ目は、ローカル配列 Arr から MyVar にデータをコピーしたいと考えています。そのため、CopyMemory() 関数を使用しましたが、何か問題があります。
2 番目のメソッドで次を使用する場合、Method2 がパラメーターとして配列を使用して呼び出される限り問題ありません (Method2(Pointer(MyString)^, Length(MyString)) または Method2(Pointer(MyArray), Length(MyArray))。 ))))。
CopyMemory(Pointer(MyVar), Pointer(Arr), size);
たとえば、整数パラメーター (Method2(MyInteger, SizeOf(MyInteger))) を指定して Method2 を呼び出すと、正しく動作しません。この場合、CopyMemory() は次のように呼び出す必要があります。
CopyMemory(@MyVar, Pointer(Arr), size);
単純型 (またはレコード) か配列かがわからない Method2 からデータを正しく返す方法は? Method1 でも状況は似ていますが、ここでは使用する必要があります。
CopyMemory(Pointer(Arr), Pointer(MyVar), size);
配列の場合
CopyMemory(Pointer(Arr), @MyVar, size);
シンプルタイプの場合。
MyVar パラメータがわからない場合はどうすればよいですか?