C
chrisn
Unregistered / Unconfirmed
GUEST, unregistred user!
在接口中定义函数
procedure QryItf(const aInCode: WideString;
var aDataSet,
aError: OleVariant);
safecall;
aInCode : 是客户机传过来的调用函数名;
aDataSet : 是回传给客户机的数据集
aError : 是返回调用中的出错信息
type
TProc = Procedure(AObj: TObject;
var aDataSet, aError: OleVariant);
procedure TmtsTest.QryItf(const aInCode: WideString;
var aDataSet,
aError: OleVariant);
var
InCodeObj : TInCode;
InCodeAddr : Pointer;
aProc : TProc;
begin
InCodeObj := TInCode.Create;
try
InCodeAddr := InCodeObj.MethodAddress(aInCode);
aProc := TProc(InCodeAddr);
aProc(nil, aDataSet, aError);
finally
InCodeObj.Free;
end;
end;
另建了个函数集合单元 CodeSrv
type
TInCode = Class(TObject)
published
procedure QueryTestTbl(var aDataSet, aError: OleVariant);
end;
procedure TInCode.QueryTestTbl(var aDataSet, aError: OleVariant);
begin
try
dm.ADOConnection1.Open;
dm.ADOQuery1.SQL.Clear;
dm.ADOQuery1.SQL.Add('select * from table1');
dm.ADOQuery1.Open;
dm.ClientDataSet1.Open;
aDataSet := dm.ClientDataSet1.Data;
aError := 'OK!';
finally
dm.ADOConnection1.Close;
end;
end;
dm 是引用的数据模, 程序调试时可以正确找到要调用的函数,
但一执行到数据模块引用就报错,客户端报"灾难性错误!"
不知道为何
procedure QryItf(const aInCode: WideString;
var aDataSet,
aError: OleVariant);
safecall;
aInCode : 是客户机传过来的调用函数名;
aDataSet : 是回传给客户机的数据集
aError : 是返回调用中的出错信息
type
TProc = Procedure(AObj: TObject;
var aDataSet, aError: OleVariant);
procedure TmtsTest.QryItf(const aInCode: WideString;
var aDataSet,
aError: OleVariant);
var
InCodeObj : TInCode;
InCodeAddr : Pointer;
aProc : TProc;
begin
InCodeObj := TInCode.Create;
try
InCodeAddr := InCodeObj.MethodAddress(aInCode);
aProc := TProc(InCodeAddr);
aProc(nil, aDataSet, aError);
finally
InCodeObj.Free;
end;
end;
另建了个函数集合单元 CodeSrv
type
TInCode = Class(TObject)
published
procedure QueryTestTbl(var aDataSet, aError: OleVariant);
end;
procedure TInCode.QueryTestTbl(var aDataSet, aError: OleVariant);
begin
try
dm.ADOConnection1.Open;
dm.ADOQuery1.SQL.Clear;
dm.ADOQuery1.SQL.Add('select * from table1');
dm.ADOQuery1.Open;
dm.ClientDataSet1.Open;
aDataSet := dm.ClientDataSet1.Data;
aError := 'OK!';
finally
dm.ADOConnection1.Close;
end;
end;
dm 是引用的数据模, 程序调试时可以正确找到要调用的函数,
但一执行到数据模块引用就报错,客户端报"灾难性错误!"
不知道为何