以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- PowerBuilder 转 foxtable (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=114034) |
-- 作者:ycwk -- 发布时间:2018/1/26 22:03:00 -- PowerBuilder 转 foxtable //假设分配的医院编号、用户名、密码均为 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 pDataHandle, String paramName, REF 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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/1/26 22:31:00 -- 不懂PB,有谁会的说说 |
-- 作者:ycwk -- 发布时间:2018/1/27 10:13:00 -- 关键是这个 如何表达形参,如何表达实参? REF String paramValue可不可以换个说法? 在vb 中,如何把字符串的地址当作实参传递给形参?
[此贴子已经被作者于2018/1/27 10:19:27编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/1/27 10:23:00 -- 如果使用StringBuilder,传递的就是地址 |
-- 作者:ycwk -- 发布时间:2018/1/27 10:36:00 -- 如果使用 string呢? 是传的地址还是值? 你的意思是要把 REF XX as string 改成 XX as StringBuilder ?
[此贴子已经被作者于2018/1/27 10:36:25编辑过]
|
-- 作者:有点蓝 -- 发布时间:2018/1/27 10:45:00 -- ref XX as string可以直接用啊,vb的语法也是这样的 |
-- 作者:ycwk -- 发布时间: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 |
-- 作者:有点蓝 -- 发布时间: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 LongDim ls_Error As new StringBuilder(1024) Dim i As Long = GetSysMessage(ll_handle,ls_Error,1024) |