如何将SocketConnection的AppServer转成接口??

cncharles 2006-06-22 04:11:38
//服务器端的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;



...全文
364 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
smonkey421 2007-01-24
  • 打赏
  • 举报
回复
请问一下“lovcal(枫兮) ”,你说现在没什么人用TSocketConnection了,那用什么呢?
halfdream 2006-06-23
  • 打赏
  • 举报
回复
才看到此贴....
liangyong007a 2006-06-23
  • 打赏
  • 举报
回复
飞过
wdsimon 2006-06-23
  • 打赏
  • 举报
回复
怎么还不结贴
lovcal 2006-06-22
  • 打赏
  • 举报
回复
狂顶一下!
lovcal 2006-06-22
  • 打赏
  • 举报
回复
转换成接口?呵呵,向搂主学习,同时感谢楼主的帮忙:)

不过,看起来现在没什么人用TSocketConnection这东西了……
猛禽 2006-06-22
  • 打赏
  • 举报
回复
唉,偶8用MIDAS很多年鸟。

印象中好像只能这样转成IxxxDisp的。
wdsimon 2006-06-22
  • 打赏
  • 举报
回复
UP
zkyylove 2006-06-22
  • 打赏
  • 举报
回复
我也帮群群MM接点分
shilinqun 2006-06-22
  • 打赏
  • 举报
回复
哈欠委托我来收取....

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧