Delphi 10.1 Berlin
我无法理解为什么我会收到错误。
编译时我收到错误消息(而TestRec是简单函数 - 一切正常):
type
TData = record
Value: string;
end;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
function TestRec(var Data: TData): Integer;
end;
...
function TForm1.TestRec(var Data: TData): Integer;
begin
Data.Value := 'TestOut';
Result := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
MyData: TData;
a: IAsyncCall;
begin
MyData.Value := 'TestIn';
a := AsyncCallEx(@TestRec, MyData); //[dcc32 Error] Unit1.pas(47): E2036 Variable required
end;
错误显示: [dcc32错误] Unit1.pas(47):E2036需要变量
答案 0 :(得分:3)
接受方法的重载print(a)
的签名是:
AsyncCallEx()
在通话中引用该方法的正确方法是:
function AsyncCallEx(Method: TAsyncCallArgRecordMethod; var Arg{: TRecordType}): IAsyncCall;
由于方法的方法声明是:
a := AsyncCallEx(TestRec, MyData);
您必须从TAsyncCallArgRecordMethod = function(var Arg{: TRecordType}): integer of object;
中的方法参数中删除数据类型。
TestRec
function TestRec(var Data{: TData}): Integer;
来自图书馆AsyncCalls。
答案 1 :(得分:-1)
更正示例代码,然后转到@LU RD:
type
TData = record
Value: string;
end;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
MyData: TData; //Global variable
procedure {function} TestRec(var Data){: Integer}; //procedure or function
end;
...
uses AsyncCalls;
...
procedure {function} TForm1.TestRec(var Data){: Integer}; //untyped parameters
begin
TData(Data).Value := 'TestOut'; //cast to type
//Result := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
a: IAsyncCall;
begin
MyData.Value := 'TestIn';
a := AsyncCallEx(TestRec, MyData); //without @ !!!
end;