我使用FastScript,给其中增加函数,但有问题。 CallMethods如下: function TZCFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; var Params: Variant): Variant; begin if MethodName = UpperCase('proc_Enter_KeyPress') then Result := proc_Enter_KeyPress(Params[0], Params[1], Params[2], Params[3], Params[4], Params[5]); if MethodName = UpperCase('fun_check_ifContinueDo') then Result := fun_check_ifContinueDo(Params[0], Params[1], Params[2], Params[3]); end;AddMethod如下: AddMethod('procedure proc_Enter_KeyPress(mt_cur: TObject; mt_next: TWinControl; var mc_key: Char; mb_button: Boolean = false; me_limit: r_InputLimit = ilNone)', CallMethod); AddMethod('function fun_check_ifContinueDo(const mb_condition: Boolean; mt_focus: TWinControl; const ms_prompt: String): Boolean', CallMethod);但提示: [DCC Error] FsZCFunctions.pas(32): E2010 Incompatible types: 'TObject' and 'Variant' [DCC Error] FsZCFunctions.pas(32): E2010 Incompatible types: 'TWinControl' and 'Variant'TObject和TWinControl在FastScript中都是可以使用的啊。
对于TObject和TWinControl什么的,
对于TObject和TWinControl什么的,我可以使用与Variant间的转换完成, 如: function TZCFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; var Params: Variant): Variant; begin if MethodName = UpperCase('proc_Enter_KeyPress') then Result := proc_Enter_KeyPress(VariantToTObject(Params[0]), VariantToTWinControl(Params[1]), VariantToChar(Params[2]), VariantToBoolean(Params[3]), VariantToTZCInputLimit(Params[4])); if MethodName = UpperCase('fun_check_ifContinueDo') then Result := fun_check_ifContinueDo(VariantToBoolean(Params[0]), VariantToTwinControl(Params[1]), Params[2]); end;但是对于var参数怎么办,我发现有下列错误提示: Constant object cannot be passed as var parameter
用户 'sa' 登录失败。
SQL State: 42000, SQL Error Code: 4060
无法打开登录所请求的数据库 "test"。登录失败。为什么啊。
CallMethods如下:
function TZCFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; var Params: Variant): Variant;
begin
if MethodName = UpperCase('proc_Enter_KeyPress') then
Result := proc_Enter_KeyPress(Params[0], Params[1], Params[2], Params[3], Params[4], Params[5]);
if MethodName = UpperCase('fun_check_ifContinueDo') then
Result := fun_check_ifContinueDo(Params[0], Params[1], Params[2], Params[3]);
end;AddMethod如下:
AddMethod('procedure proc_Enter_KeyPress(mt_cur: TObject; mt_next: TWinControl; var mc_key: Char; mb_button: Boolean = false; me_limit: r_InputLimit = ilNone)', CallMethod);
AddMethod('function fun_check_ifContinueDo(const mb_condition: Boolean; mt_focus: TWinControl; const ms_prompt: String): Boolean', CallMethod);但提示:
[DCC Error] FsZCFunctions.pas(32): E2010 Incompatible types: 'TObject' and 'Variant'
[DCC Error] FsZCFunctions.pas(32): E2010 Incompatible types: 'TWinControl' and 'Variant'TObject和TWinControl在FastScript中都是可以使用的啊。
如:
function TZCFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; var Params: Variant): Variant;
begin
if MethodName = UpperCase('proc_Enter_KeyPress') then
Result := proc_Enter_KeyPress(VariantToTObject(Params[0]), VariantToTWinControl(Params[1]), VariantToChar(Params[2]), VariantToBoolean(Params[3]), VariantToTZCInputLimit(Params[4]));
if MethodName = UpperCase('fun_check_ifContinueDo') then
Result := fun_check_ifContinueDo(VariantToBoolean(Params[0]), VariantToTwinControl(Params[1]), Params[2]);
end;但是对于var参数怎么办,我发现有下列错误提示:
Constant object cannot be passed as var parameter