【发布时间】:2009-07-08 20:56:01
【问题描述】:
我写了两个带有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 (Method2(Pointer(MyString)^, Length(MyString)) 或 Method2(Pointer(MyArray),长度(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 参数是什么时,我该怎么办?
【问题讨论】:
标签: delphi parameters void