如何将SocketConnection的AppServer转成接口??
//服务器端的DataModule
type
TTest = class(TRemoteDataModule, ITest)
DataSetProvider1: TDataSetProvider;
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
procedure GetValue(var I: SYSINT); safecall;
public
{ Public declarations }
end;
LIBID_Server: TGUID = '{F56A9A6D-94D9-4D53-B08C-5CA01F2939EC}';
IID_ITest: TGUID = '{71D745E1-2AE3-4623-846B-4DC57E11C429}';
CLASS_Test: TGUID = '{2CFC79FC-3F38-4678-9D94-9A37A033F03E}';
ITest = interface(IAppServer)
['{71D745E1-2AE3-4623-846B-4DC57E11C429}']
procedure GetValue(var I: SYSINT); safecall;
end;
// *********************************************************************//
// DispIntf: ITestDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {71D745E1-2AE3-4623-846B-4DC57E11C429}
// *********************************************************************//
ITestDisp = dispinterface
['{71D745E1-2AE3-4623-846B-4DC57E11C429}']
procedure GetValue(var I: SYSINT); dispid 301;
function AS_ApplyUpdates(const ProviderName: WideString; Delta: OleVariant; MaxErrors: Integer;
out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant; dispid 20000000;
function AS_GetRecords(const ProviderName: WideString; Count: Integer; out RecsOut: Integer;
Options: Integer; const CommandText: WideString; var Params: OleVariant;
var OwnerData: OleVariant): OleVariant; dispid 20000001;
function AS_DataRequest(const ProviderName: WideString; Data: OleVariant): OleVariant; dispid 20000002;
function AS_GetProviderNames: OleVariant; dispid 20000003;
function AS_GetParams(const ProviderName: WideString; var OwnerData: OleVariant): OleVariant; dispid 20000004;
function AS_RowRequest(const ProviderName: WideString; Row: OleVariant; RequestType: Integer;
var OwnerData: OleVariant): OleVariant; dispid 20000005;
procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString;
现在客户端如何用SocketConnection.AppServer转换成ITest或ITestDisp呢?
感谢 YY群的哈欠提供下面的方法, 不过只能得ITestDisp并且代码并不安全.
有高手提供更好的方法另外给分.
procedure TForm3.Button1Click(Sender: TObject);
var
I: integer;
ADisp:ITestDisp;
begin
{
SocketConnection1.AppServer.GetValue(I);
ShowMessage(IntToStr(I));} //这样肯定可以得到
ADisp:=ITestDisp(IDispatch(SocketConnection1.AppServer));
ADisp.GetValue(I);
ShowMessage(IntToStr(I));
end;