L
leaf_fall
Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi6在import type library时会把事件参数得顺序写反,导致触发事件是参数顺序示是反的。
而在delphi5中引入就是对的。
举个例子,引入ado2.7时,在delphi5中看,adodb_tlb.pas中得TRecordset.InvokeEvent参数顺序是对的。
procedure TRecordset.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
begin
case DispID of
-1: Exit; // DISPID_UNKNOWN
[red]9: if Assigned(FOnWillChangeField) then
FOnWillChangeField(Self, Params[0] {Integer}, Params[1] {OleVariant}, Params[2] {var EventStatusEnum}, Params[3] {const _Recordset});[/red] 。。。。
end; {case DispID}
end;
而在delphi6中引入时,看到的确实反得
procedure TRecordset.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
begin
case DispID of
-1: Exit; // DISPID_UNKNOWN
[red]9: if Assigned(FOnWillChangeField) then
FOnWillChangeField(Self, Params[3] {const Recordset15}, Params[2] {var EventStatusEnum}, Params[1] {OleVariant}, Params[0] {Integer});[/red] 。。。。
end; {case DispID}
end;
实际测试结果也是反的,是delphi6的bug?
我这边手头没有delphi7,有的人帮我试试看,delphi7里是不是也是反得?
而在delphi5中引入就是对的。
举个例子,引入ado2.7时,在delphi5中看,adodb_tlb.pas中得TRecordset.InvokeEvent参数顺序是对的。
procedure TRecordset.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
begin
case DispID of
-1: Exit; // DISPID_UNKNOWN
[red]9: if Assigned(FOnWillChangeField) then
FOnWillChangeField(Self, Params[0] {Integer}, Params[1] {OleVariant}, Params[2] {var EventStatusEnum}, Params[3] {const _Recordset});[/red] 。。。。
end; {case DispID}
end;
而在delphi6中引入时,看到的确实反得
procedure TRecordset.InvokeEvent(DispID: TDispID; var Params: TVariantArray);
begin
case DispID of
-1: Exit; // DISPID_UNKNOWN
[red]9: if Assigned(FOnWillChangeField) then
FOnWillChangeField(Self, Params[3] {const Recordset15}, Params[2] {var EventStatusEnum}, Params[1] {OleVariant}, Params[0] {Integer});[/red] 。。。。
end; {case DispID}
end;
实际测试结果也是反的,是delphi6的bug?
我这边手头没有delphi7,有的人帮我试试看,delphi7里是不是也是反得?