第一个搞定的我派50分!
解决方案 »
- 如何让dbedit写代码提交?
- 我快被BusinessSkinForm搞疯了~~~~~
- 大家做DELPHI程序员的时候,进公司都面试或考试的什么题,大家请谈谈??
- 向excel中导文件
- 请教:关于就业协议的问题!(在线等待)
- Access 查询空值的时间记录
- 用Canvas.LineTo(round(42+30*(sin(a))),round(40+30*(cos(a))));畫線,那怎樣把這條線清除?
- 如何向国外发布软件?
- 超菜问题。
- 问一个关于用webbrowser 去 图片地址的问题!!!!!!!!!!!!!!!!!
- delphi8编译Vcl Forms application有问题?
- 关于回调
/TForm2 = class(TForm)Button1: TButton;Label1: TLabel;Label2: TLabel;Label3: TLabel;Edit1: TEdit;Edit2: TEdit;Edit3: TEdit;SocketConnection1: TSocketConnection;procedure Button1Click(Sender: TObject);procedure FormCreate(Sender: TObject);privateFClientCallBack : TClientCallBack;/////////这一句是接口正真的实例化;{ Private declarations }publicMyDCOMConnection : TDispatchConnection;//////注意这一句:TDispatchConnection 是如下定义的://////TDispatchConnection = class(TCustomRemoteServer){ Public declarations }end;varForm2: TForm2;ClientVar : IDCOMServerSL1;////////////////////////////////////////////////////////////////////////////////////定义一个接口,是TypeLib中声明的哦;uses Server_TLB,(User TypeLib)//////////////////////////////////////////////////////////////////////////////implementation {$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);beginClientVar := CoDCOMServerSL1.Create;if ClientVar.GetInfo(Edit1.Text,Edit2.Text) thenbeginApplication.MessageBox('恭喜您,登录成功!','操作提示',MB_OK + MB_ICONINFORMATIO
N);end elsebeginApplication.MessageBox('对不起,登录失败!','操作提示',MB_OK + MB_ICONINFORMATIO
N);end;////////////////////////////////////////////////////////////////////////////////
//////////////MyDCOMConnection.AppServer.ProcName;,也可以用这种进行回调/////////CoDCOMBackCall = class/////////class function Create: IDCOMBackCall;////////class function CreateRemote(const MachineName: string): IDCOMBackCall;////////end;////////看一看它的定义,它其实是一个类,呵呵,协同接口类;是实现一个或多个接口的类,///////有一个类生成库和一个类标识器;///////这一部分是DCOM的,和回调无关;////////////////////////////////////////////////////////////////////////////////
///////end;{ TClientCallBack } procedure TForm2.FormCreate(Sender: TObject);varTypeLib : ITypeLib;beginMyDCOMConnection := SocketConnection1;MyDCOMConnection.Connected := True;OLECheck(LoadRegTypeLib(LIBID_Server,0,0,1,TypeLib));MyDCOMConnection.AppServer.GetInfos(FClientCallBack as IDispatch);{///////////////////////////////////////////////////////////////////////////////////MyDCOMConnection := SocketConnection1;是回调的关键,你要用它来代替TSocketC
onnection,操作还是类实例之间,你明白吗?//////MyDCOMConnection.Connected := True;还用说吗?//////OLECheck(LoadRegTypeLib(LIBID_Server,0,0,1,TypeLib));在客户端注册;//////MyDCOMConnection.AppServer.GetInfos(FClientCallBack as IDispatch);开始执行
,而且进行接口转化;//////TypeLib : ITypeLib;可以应用类型库类 Uses ActiveX;//////////////////////////////////////////////////////////////////////////////}end;{ TClientCallBack }procedure TClientCallBack.SetInfo(var InfoName, InfoPass: OleVariant);beginShowMessage(InfoName);ShowMessage(InfoPass);{//////////////////////////////////////////////////////////////////////////////////我不知道你是否知道RDM中是如果引用接口的,这和它是一样的;//////////////////////////////////////////////////////////////////////////////}end;end.{=======================DCOM调用 VS 回调机制例程=======================作者:小小;创建日期:2002-10-24 01:49(凌晨,呵呵)调试工具:Delphi6 VS Windows 2000;参考文献:大脑,呵呵:)信息反馈:[email protected]交 www.nxrs.net/bbs=========================================================================}unit ServerRDM; ////////远程数据模块,是回调机制用的,于DCOM无关;{$WARN SYMBOL_PLATFORM OFF}interfaceusesWindows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,DBClient, Server_TLB, StdVcl;typeTDCOMBackCall = class(TRemoteDataModule, IDCOMBackCall)privateBackCallSL : OleVariant;{ Private declarations }protectedclass procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string)
; override;procedure GetInfos(var Infos: OleVariant); safecall;public{ Public declarations }end;implementation{$R *.DFM}class procedure TDCOMBackCall.UpdateRegistry(Register: Boolean; const ClassID, P
rogID: string);beginif Register thenbegininherited UpdateRegistry(Register, ClassID, ProgID);EnableSocketTransport(ClassID);EnableWebTransport(ClassID);end elsebeginDisableSocketTransport(ClassID);DisableWebTransport(ClassID);inherited UpdateRegistry(Register, ClassID, ProgID);end;end;procedure TDCOMBackCall.GetInfos(var Infos: OleVariant);beginBackCallSl := Infos;BackCallSl.SetInfo('a','b');{///////////////////////////////////////////////////////BackCallSl := Infos;(还记得这个参数传过来的是什么吗?呵呵,看前边去;)/////回调,可以由任意事件进行激发///////////////////////////////////////////////// }end;initializationTComponentFactory.Create(ComServer, TDCOMBackCall,Class_DCOMBackCall, ciMultiInstance, tmApartment);end.]{=======================DCOM调用 VS 回调机制例程=======================作者:小小;创建日期:2002-10-24 01:49(凌晨,呵呵)调试工具:Delphi6 VS Windows 2000;参考文献:大脑,呵呵:)信息反馈:[email protected]交 www.nxrs.net/bbs
safecall;procedure Call; safecall;end;// *********************************************************************//// DispIntf: IDCOMServerSL1Disp// Flags: (4416) Dual OleAutomation Dispatchable// GUID: {3532A2E2-A14F-4C6F-BEDD-2E195668C084}// *********************************************************************//IDCOMServerSL1Disp = dispinterface['{3532A2E2-A14F-4C6F-BEDD-2E195668C084}']function GetInfo(const UserName: WideString; const Pass: WideString): WordBool;
dispid 1;procedure Call; dispid 2;end;// *********************************************************************//// Interface: IDCOMBackCall// Flags: (4416) Dual OleAutomation Dispatchable// GUID: {A9B9B314-662F-4B95-8282-7EFD3F78549E}// *********************************************************************//IDCOMBackCall = interface(IDispatch)['{A9B9B314-662F-4B95-8282-7EFD3F78549E}']procedure GetInfos(var Infos: OleVariant); safecall;end;// *********************************************************************//// DispIntf: IDCOMBackCallDisp// Flags: (4416) Dual OleAutomation Dispatchable// GUID: {A9B9B314-662F-4B95-8282-7EFD3F78549E}// *********************************************************************//IDCOMBackCallDisp = dispinterface['{A9B9B314-662F-4B95-8282-7EFD3F78549E}']procedure GetInfos(var Infos: OleVariant); dispid 1;end;// *********************************************************************//// Interface: IDCOMBackCalls// Flags: (4416) Dual OleAutomation Dispatchable// GUID: {6C16F66E-CF22-4E61-9F4F-82F5F1933154}// *********************************************************************//IDCOMBackCalls = interface(IDispatch)['{6C16F66E-CF22-4E61-9F4F-82F5F1933154}']procedure SetInfo(var InfoName: OleVariant; var InfoPass: OleVariant); safecall;end;// *********************************************************************//// DispIntf: IDCOMBackCallsDisp// Flags: (4416) Dual OleAutomation Dispatchable// GUID: {6C16F66E-CF22-4E61-9F4F-82F5F1933154}
verSL1;beginResult := CreateRemoteComObject(MachineName, CLASS_DCOMServerSL1) as IDCOMServer
SL1;end;class function CoDCOMBackCall.Create: IDCOMBackCall;beginResult := CreateComObject(CLASS_DCOMBackCall) as IDCOMBackCall;end;class function CoDCOMBackCall.CreateRemote(const MachineName: string): IDCOMBack
Call;beginResult := CreateRemoteComObject(MachineName, CLASS_DCOMBackCall) as IDCOMBackCal
l;end;end.{=======================DCOM调用 VS 回调机制例程=======================作者:小小;创建日期:2002-10-24 01:49(凌晨,呵呵)调试工具:Delphi6 VS Windows 2000;参考文献:大脑,呵呵:)信息反馈:[email protected]交 www.nxrs.net/bbs=========================================================================}unit SLXK;//////////DCOM,与回调无关{$WARN SYMBOL_PLATFORM OFF}interfaceusesComObj, ActiveX, Server_TLB, StdVcl;typeTDCOMServerSL1 = class(TAutoObject, IDCOMServerSL1)protectedfunction GetInfo(const UserName, Pass: WideString): WordBool; safecall;procedure Call; safecall;{ Protected declarations }end;implementationusesServerM ,ComServ;function TDCOMServerSL1.GetInfo(const UserName,Pass: WideString): WordBool;beginif ( UserName <>'Server' ) or (Pass <>'Admin') thenbeginResult := Falseend elsebeginResult := True;Form1.Label1.Caption := '客户成功登录';end;{///////////////////////////////////////////////////////////////////////////////////////这个自己分析,如果说不会,那就惨喽//////////////////////////////////////////////////////////////////////////////}end;procedure TDCOMServerSL1.Call;beginShowMessage('aa'); //// or GetInfo(UserName,Pass);end;initializationTAutoObjectFactory.Create(ComServer, TDCOMServerSL1, Class_DCOMServerSL1,ciMultiInstance, tmApartment);end.{=======================DCOM调用 VS 回调机制例程=======================作者:小小;创建日期:2002-10-24 01:49(凌晨,呵呵)调试工具:Delphi6 VS Windows 2000;参考文献:大脑,呵呵:)信息反馈:[email protected]交 www.nxrs.net/bbs=========================================================================}//////////索性将服务应用程序也贴上,没有作用的,就是用来标示客户是否可以正确连接unit ServerM;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Label1: TLabel;private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}end.