|

楼主 |
发表于 2014-5-30 18:13:54
|
显示全部楼层
有Indy版,也有Synapse版本的,这两个版本用法完全一样,所以只能安装其中一个版本,在Lazarus上相对来说,用Synapse版本比较方便一些,因为indy安装挺麻烦的。
至于使用挺简单的,这里有个例子:- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
- HproseHttpClient, HproseClient;
- type
- { TForm1 }
- TForm1 = class(TForm)
- Button: TButton;
- Client: THproseHttpClient;
- TextLabel: TLabel;
- procedure ButtonClick(Sender: TObject);
- private
- procedure Callback(Result: Variant);
- { private declarations }
- public
- { public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.lfm}
- { TForm1 }
- procedure TForm1.ButtonClick(Sender: TObject);
- var
- Stub: Variant;
- begin
- Stub := Client.UseService('http://www.hprose.com/example/');
- Stub.Hello('World!', HproseCallback(@Callback));
- end;
- procedure TForm1.Callback(Result: Variant);
- begin
- TextLabel.Caption := Result;
- end;
- end.
复制代码 这个例子中的服务是php写的,不过调用任何语言的服务用起来都是一样的。
更详细的使用这里有份指南:https://github.com/andot/hprose/ ... pascal.pdf?raw=true
不过这个文档有些老了,里面的客户端控件的名字跟现在的不一样了(现在的没有 Id 或 Syna 这个标识了,目的是为了在使用不同实现的 Hprose 客户端之间实现零修改转换),调用方式上,现在的方式(上面例子中的方式)也比文档上的简单了。另外,新版中,对象在包装成 Variant 后,也可以继续操作对象的属性,并可以直接在包装之后的 Variant 变量上调用 Free 方法来释放对象了。这对于远程传递的纯数据对象来说,就可以免除 Variant 到具体类型对象的转换了。
|
|