Foxtable(狐表)用户栏目专家坐堂 → PowerBuilder 转 foxtable


  共有2018人关注过本帖树形打印复制链接

主题:PowerBuilder 转 foxtable

帅哥哟,离线,有人找我吗?
ycwk
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
PowerBuilder 转 foxtable  发帖心情 Post By:2018/1/26 22:03:00 [只看该作者]

//假设分配的医院编号、用户名、密码均为 654321
//
假 设 客 户 端 计 算 机 名 为 YB654321,IP 地 址 为 ’192.168.1.20’,mac 地 址 为
XX-XX-XX-XX-XX-XX’
long ll_rtn = - 1
String ls_yybh=' 654321'
String ls_user=' 654321'
String ls_encpwd='654321'
String ls_cname = 'YB654321'
String ls_ip = '192.168.1.2'
String ls_mac = 'XX-XX-XX-XX-XX-XX'
String ls_svrIP='192.168.1.1' //
假设此 ip 为前置机 ip
String lu_port ='9090' //
假设前置机开放端口为 9090
武汉市医疗保险信息系统—与 HIS 系统信息交换方案
21
//创建调用实例
ll_rtn=HnHisDll.Initialize(ls_svrIP,lu_port,li_sndBufSize,li_recvBufSize)
if ll_rtn <= 0 then
MessageBox(“
系统错误”, “HNHISBridge 初始化调用实例操作异常! ”, StopSign!, OK!)
end if
//
创建调用实例
ll_handle = HnHisDll.CreateInstace()
if ll_rtn =1 then
//
将单项数据传入调用实例
ll_rtn = HnHisDll.SetParam(ll_handle, “FN”, “1”) //设置功能号 本示例是登录
ll_rtn = HnHisDll.SetParam(ll_handle, “YYBH”, ls_yybh) //医院编号
ll_rtn = HnHisDll.SetParam(ll_handle, “USERID”, ls_user) //医院 HIS 登录用户
ll_rtn = HnHisDll.SetParam(ll_handle, “PWD”, ls_encpwd) //医院 HIS 登录密码
ll_rtn = HnHisDll.SetParam(ll_handle, “COMPUTER”, ls_cname) //医院 HIS 登录计算机名
ll_rtn = HnHisDll.SetParam(ll_handle, “IP”, ls_ip) //医院 HIS 登录计算机 IP 地址
ll_rtn = HnHisDll.SetParam(ll_handle, “MAC”, ls_mac) //医院 HIS 登录计算机 MAC 地址
//运行该调用实例,向服务器发送请求并接收响应
ll_rtn = HnHisDll.Run(ll_handle)
If ll_rtn <> 1 then
//
取详细信息
HnHisDll.GetSysMessage(ll_handle, ls_Error, 1024)
MessageBox(“
错误”, “操作失败! ” + “~r~n” +”详细信息: ” + ls_Error)
End If
//
获取返回的单项数据
String ls_fhz =space(1024),ls_msg =space(1024)
ll_rtn= HnHisDll.GetParam(ll_handle, “FHZ”,ls_fhz,1024) //
返回值
ll_rtn= HnHisDll.GetParam(ll_handle, “MSG”,ls_msg,1024) //返回信息

end if
//
释放调用实例
ll_rtn = HnHisDll.DestroyInstance(ll_handle)
If ll_rtn <> 1 then
MessageBox(“
系统错误”, “HNHISBridge 释放调用实例操作异常! ”, StopSign!, OK!)
End If
  


问题1:
请问    ll_handle = CreateInstace()  这句话在foxtable 中有必要写吗?   如果有必要的话,要如何改写?


问题2:
我把PB中的引用 的GetParam函数
FUNCTION Long GetParam(Long pDataHandleString paramNameREF String paramValue, UINT nMaxValueLenth) LIBRARY “HNBridge.dll”  
改成了如下方式对吗?  主要是REF String 和UINT 这样改对吗?
Public Declare Function GetParam Lib "DLL\HNBridge.dll" Alias "GetParam"(pDataHandle As Long,paramName As String, paramValue As StringBuilder ,nMaxValueLenth As Integer)  As Long 



[此贴子已经被作者于2018/1/26 22:08:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/1/26 22:31:00 [只看该作者]

不懂PB,有谁会的说说

 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/1/27 10:13:00 [只看该作者]

关键是这个 如何表达形参,如何表达实参?
 REF String paramValue


可不可以换个说法? 在vb 中,如何把字符串的地址当作实参传递给形参?
[此贴子已经被作者于2018/1/27 10:19:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/1/27 10:23:00 [只看该作者]

如果使用StringBuilder,传递的就是地址

 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/1/27 10:36:00 [只看该作者]

如果使用 string呢?   是传的地址还是值?

你的意思是要把   REF  XX  as string   改成   XX as StringBuilder          ?
[此贴子已经被作者于2018/1/27 10:36:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/1/27 10:45:00 [只看该作者]

ref  XX  as string可以直接用啊,vb的语法也是这样的

 回到顶部
帅哥哟,离线,有人找我吗?
ycwk
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1218 积分:8451 威望:0 精华:0 注册:2016/2/2 21:52:00
  发帖心情 Post By:2018/1/27 10:51:00 [只看该作者]

全局代码:
Public Declare Function GetSysMessage Lib "DLL\HNBridge.dll" Alias "GetSysMessage"(pDataHandle As Long ,ByRef Message As String,nMaxMessage As uINT32)  As Long


调用:

Dim ll_rtn As Long = - 1
Dim ls_yybh As String="420101"
Dim ls_user As String="990824"
Dim ls_encpwd As String="990824"
Dim ls_cname As String= "WKNoteBook"
Dim ls_ip As String= "192.168.1.2"
Dim ls_mac As String= "18-DB-F2-5B-02-1A"
Dim ls_svrIP As String="172.16.5.63"   '假设此 ip 为前置机 ip
Dim lu_port As String="9090"   '假设前置机开放端口为 9090



'创建调用实例
Dim li_sndBufSize As Integer=16384
Dim li_recvBufSize As Integer=16384
ll_rtn=Initialize(ls_svrIP,lu_port,li_sndBufSize,li_recvBufSize)
If ll_rtn <= 0 Then
  MessageBox.Show("系统错误", "HNHISBridge 初始化调用实例操作异常! ")
Else 
  msgbox("成功")
'  msgbox(ll_rtn)    '返回1表示成功了
End If

'创建调用实例
Dim ll_handle As Long

ll_handle = CreateInstace()
msgbox("获得的句柄为:" & ll_handle)

If ll_rtn =1 Then
msgbox("ll_rtn=" & ll_rtn)
'将单项数据传入调用实例
ll_rtn = SetParam(ll_handle, "FN", "1")  '设置功能号 本示例是登录
ll_rtn = SetParam(ll_handle, "YYBH", ls_yybh)   '医院编号
ll_rtn = SetParam(ll_handle, "USERID", ls_user)   '医院 HIS 登录用户
ll_rtn = SetParam(ll_handle, "PWD", ls_encpwd)   '医院 HIS 登录密码
ll_rtn = SetParam(ll_handle, "COMPUTER", ls_cname)  '医院 HIS 登录计算机名
ll_rtn = SetParam(ll_handle, "IP", ls_ip)   '医院 HIS 登录计算机 IP 地址
ll_rtn = SetParam(ll_handle, "MAC", ls_mac)  '医院 HIS 登录计算机 MAC 地址


'运行该调用实例,向服务器发送请求并接收响应
ll_rtn = Run(ll_handle)
msgbox("ll_rtn的结果是:" & ll_rtn)

Dim ls_Error As StringBuilder
If ll_rtn <> 1 Then

'取详细信息
Dim i As  Long = GetSysMessage(ll_handle,ls_Error,1024)              运行到这里,i的结果就是错的,唉,不知道是ls_error的调用方式有问题吗?       ll_handle是long类型,此时的值为:  433057560

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107718 积分:547917 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/1/27 11:12:00 [只看该作者]

试试

全局代码:
Public Declare Function GetSysMessage Lib "DLL\HNBridge.dll" Alias "GetSysMessage"(pDataHandle As Long ,Message As StringBuilder,nMaxMessage As uINT32)  As Long

Dim ls_Error As new StringBuilder(1024)
Dim i As  Long = GetSysMessage(ll_handle,ls_Error,1024) 

 回到顶部