我寫兩種方法具有空隙型參數:讀取和分配空隙類型參數
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))方法調用Method2是正常的,如果我在第二種方法中使用以下內容, ,Length(MyArray)))。
CopyMemory(Pointer(MyVar), Pointer(Arr), size);
如果我調用方法二用,例如,整型參數(方法二(MyInteger,一下SizeOf(MyInteger))),它不能正常工作。在這種情況下,CopyMemory的()已被稱爲是這樣的:
CopyMemory(@MyVar, Pointer(Arr), size);
如何返回從方法2的數據正確,不知道它是否是一個簡單的類型(或記錄)或數組?這種情況將在方法1相似,但在這裏我將不得不使用
CopyMemory(Pointer(Arr), Pointer(MyVar), size);
在數組中的情況下
和
CopyMemory(Pointer(Arr), @MyVar, size);
簡單類型的情況。
當我不知道MyVar參數是什麼時,我該怎麼辦?
謝謝你的回答。似乎我以錯誤的方式調用了我的方法,這就是爲什麼我得到了AV異常,並認爲CopyMemory()函數必須以兩種不同的方式調用。感謝您的解釋,我很容易找到我的錯誤。 – 2009-07-09 18:49:39
@亞歷山大。你的總結很好。 – Dylan 2011-08-23 09:40:51