我写了两个带有 void 类型参数的方法:
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。在第二个中,我想将数据从本地数组 Arr 复制到 MyVar。因此我使用了 CopyMemory() 函数,但它有问题。
如果我在第二种方法中使用以下内容,则只要使用数组作为参数 (Method2(Pointer(MyString)^, Length(MyString)) 或 Method2(Pointer(MyArray), Length(MyArray) 调用 Method2 就可以了)))。
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 参数是什么时,我该怎么办?