
RPC API 编程手册与编程指南
1 RPC API 编程指南
1.1 UBaseIII RPC 简介
UBaseIII RPC 是 PC 机与掌上机之间远程过程调用函数库,它包含通讯协议以及远程
过程 RAPI,RPC 协议基于远程过程调用模型,类似于本地过程调用模型。在本地过程调
用模型中,调用者把过程的参数放在特定的位置。接着,它把控制传给过程,过程的结果
可以从特定的位置得到,调用者继续执行。远程过程调用模型也是类似的。控制在两个进
程中传递:调用者进程和服务器进程。调用者进程首先向服务器进程发出请求报文,然后
等待回答。调用报文包括过程的参数,回答报文包括过程的结果。一旦接收到应答报文,
就可获取过程的结果,调用者继续执行。
在服务器端,一个进程睡眠等待调用报文的到来。当有调用报文时,服务器进程提取
过程的参数,计算出结果,发送应答报文,接着等待下一条报文。
在这种模型中,在任一时刻最多只有一个进程时活跃的。因此 UBaseIII RPC 协议对
于并发模型是有限制的。
远程过程调用和本地过程调用有以下不同:
错误处理:远程过程调用中必须处理远程服务器和网络错误。
全局变量:由于服务器端不能读写客户端的地址空间,隐含参数不能作为全
局变量传递。
效率:远程过程比本地过程慢。
RPC 调用示意图
NLSRPC API 种类
第 2 页 共 29 页 , ©2002, Landstanding Co.,Ltd. Fujian Newland Group.
http://www.landstanding.com/

RPC API 编程手册与编程指南
1.2 基于 RPC 的应用系统开发
1.2.1 掌上机开发
在 UBaseIII 中,RPC 作为一种设备,当在掌上机上启动 RPC 设备后,在 PC 上就可
以使用 RAPI 对底层进行操作了。
打开 RPC 设备:
!
"
#
$%&
$%'()"*+,*,
启动
模块
rpc_info rpcinfo;
rpcinfo.nPort = 1;
rpcinfo.nBaudRate = 115200;
rpcinfo.bCompress = FALSE;
$%-!.$%((int)&rpcinfo, 0)
/0&121'34)'-3533'617-8
$%-!.$%-&!.9
$%&
$%'()"*+,*,
设备已停止,任意键退出
/0&121'34)'-3533'+
另外还有一种实现方法,代码如下:
02":;<=
rpc_info rpcinfo;
rpcinfo.nPort = 1;
rpcinfo.nBaudRate = 115200;
rpcinfo.bCompress = TRUE;
m_hRpc = OpenDevice((int)&rpcinfo, 0);
-0
. 2",>
已启动。
,-
第 3 页 共 29 页 , ©2002, Landstanding Co.,Ltd. Fujian Newland Group.
http://www.landstanding.com/
NLSRPC API 种类
RPC 设置 系统信息 文件操作 其它

RPC API 编程手册与编程指南
#
&.
. 2",
启动
>
失败
6,-
#
在上面的用到的一个 rpc_info 结构,它的定义如下:
typedef struct rpc_info{
int nPort; //端口号
int nBaudRate; //波特率
BOOL bCompress; //是否采用压缩报文
}URPCINFO, *PURPCINFO;
在 NLS_041 机型中,由于内存只有 512K ,所以应该把结构中的 bCompress 设为
FALSE。
1.2.2 PC 上开发
在 PC 上对掌上机的文件名表示方法为:在文件名的头部加上”NLS:\”。在 NLSRPC
API 中的字符串参数,支持两种格式,一种是宽字符,如果采用宽字符来表示,在调用函
数之前,可用 MultiByteToWideChar()函数将多字节字符转换成宽字节字符。另外一种
是窄字符,可以把字符指针或者字符数组直接传入。
下面是一些 NLSRPC API 的应用:
?@89:*A;=,*:*A;=
B-3 9,AC;++
98(4..D!(!E
.9,+,.F!'@8*A;
.*,+,.F!'@8*A;
4"&'!?0-8,+,GHH.I(,9*,9,*A;
4"&'!?0-8,+,BGHH.I(,9<,*,*A;
B-!5&?9,*,58B
B-
这个程序将一个”d:\\test.txt”文件拷贝到”NLS:\\test.txt”去,在 NLSAPI 中,NLS:\开头
的文件名将被识别掌上机的文件。
下面将获取掌上机的文件列表。
'3B'B''"'3
53-8'8J
@80J&J 383-@8-8
?@8&./:48K-8'@=LL3)
4"&'!?0-8, +, BGHHI, 48K-8'@,
&./,48K-8'@
0J&J B-5 5.5&&./,MJ
/0&0J&J 6383-@8-8
"'3I0 03
"'3I03 .8'3-B)'
"'3II.F'(J I5&
第 4 页 共 29 页 , ©2002, Landstanding Co.,Ltd. Fujian Newland Group.
http://www.landstanding.com/

RPC API 编程手册与编程指南
"'3IIB&3D
5)-B'-3)
"'3II.E'35-'K'
-'&$%3 .3M"'3
6B-5 (5&0J&J ,MJ
2E
#
B-5 &!.0J&J
代码中的 m_pTreeCtrl 为实例过的 CtreeCtrl 类指针。
如何开发一个比较完备的文件拷贝程序了,有进度条显示拷贝进度,以及在拷贝过程
中取消拷贝,看下面的代码:
!!5&('.&DGG) "! !
- +
B-3 9,99A*++
B-!5&(GHH.I(,BGHH.I(,, M- ,
M-2 &,58B
B'9++,9+++,+
#
!!5&('.&DGG) '3' 3
- %+MM- N9++
-&!D..IB!.-
- 9++
1&&'9++
B-
8(4..D!(! 6
#
#
&!DGG) ' 3
#
!!5&('.&DGG) "! &
-2 &'
#
在上面的代码中,
m_nPercent 为拷贝进度百分比,为类的成员变量。
m_nPercent 为拷贝过程中的中断变量,为类的成员变量。
m_ctlProgress 为 CProgress 控件的一个实例,为类的成员变量。
为了能够让进度条表示拷贝进度,在上面的代码中,建立了一个 Timer,用来实时更
新进度。当取消标记 m_bCancel 置于 TRUE 时,CopyFileEx 将 m_nPercent 置于 100 值。
第 5 页 共 29 页 , ©2002, Landstanding Co.,Ltd. Fujian Newland Group.
http://www.landstanding.com/
评论0