两个程序 A EXE
B Dll
EXE调用DllEXE程序中定义了过程function Sql_Open(sSQL: string; myQuery: TClientDataSet = nil;
ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet;dll中需要回调Sql_Open
=============================================================================================
具体代码如下------com接口中这样写的
unit uUfInFc;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Sysutils, ComObj, ActiveX, UfInFc_TLB, StdVcl, Classes, DBClient, Forms;type
TSql_Open = function (sSQL: string; myQuery: TClientDataSet = nil;
ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet of object; TTUfInFc = class(TAutoObject, ITUfInFc)
public
FSql_Open: TSql_Open;
protected
procedure MakeVouCh; safecall;
end;-------------调用是这样写的
Try
FUFInFcCOM := GetActiveOleObject('UFInFc.TUFInFc');
except
try
FUFInFcCOM := CreateOleObject('UFInFc.TUFInFc');
FUFInFcCOM.FSql_Open:= Sql_Open;
FUFInFcCOM.MakeVouCh;
except
Application.MessageBox('无法获取[email protected]',App_caption,mb_ok+MB_ICONINFORMATION);
end;
end;==================问题如下
com接口中如何回调EXE的Sql_Open
B Dll
EXE调用DllEXE程序中定义了过程function Sql_Open(sSQL: string; myQuery: TClientDataSet = nil;
ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet;dll中需要回调Sql_Open
=============================================================================================
具体代码如下------com接口中这样写的
unit uUfInFc;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Sysutils, ComObj, ActiveX, UfInFc_TLB, StdVcl, Classes, DBClient, Forms;type
TSql_Open = function (sSQL: string; myQuery: TClientDataSet = nil;
ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet of object; TTUfInFc = class(TAutoObject, ITUfInFc)
public
FSql_Open: TSql_Open;
protected
procedure MakeVouCh; safecall;
end;-------------调用是这样写的
Try
FUFInFcCOM := GetActiveOleObject('UFInFc.TUFInFc');
except
try
FUFInFcCOM := CreateOleObject('UFInFc.TUFInFc');
FUFInFcCOM.FSql_Open:= Sql_Open;
FUFInFcCOM.MakeVouCh;
except
Application.MessageBox('无法获取[email protected]',App_caption,mb_ok+MB_ICONINFORMATION);
end;
end;==================问题如下
com接口中如何回调EXE的Sql_Open
你这里赋值了, 那边就可以调用啊
-----------
FUFInFcCOM.FSql_Open:= Sql_Open;
这句提示不有足够的参数
TSql_Open = function (sSQL: string; myQuery: TClientDataSet = nil;
ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet of object;of object; 这个是不需要的。
TSql_Open = function (sSQL: string; myQuery: TClientDataSet = nil;
ShowErrMsg: Boolean = True; FixMsg : string = ''): TClientDataSet;