C#调用新农医系统第三方接口VC动态库,参数返回值为空,求解,JFNetLib,SetRemoteServerAddr,SendRequestPack

yezeguo 2012-05-31 02:18:16
代码如下:
Int64 dk = 8800;
StringBuilder sbIP = new StringBuilder("192.168.0.80");
StringBuilder sbCS = new StringBuilder("EXCHCODE=GY01&HOSCODE=0C01");
StringBuilder sbJG = new StringBuilder(1024);
SetRemoteServerAddr(dk, sbIP);
int cnt = (int)SendRequestPack(sbCS, sbCS.Length, sbJG, sbJG.Length, 200);
MessageBox.Show(cnt.ToString());
MessageBox.Show(sbJG.ToString());

cnt.ToString()结果为1,表示“连接医院前置机服务器失败”,
sbJG.ToString()结果为空,求各位高手赐教,

引用代码:
public class Sxnb
{
[DllImport("JFNetLib.dll", EntryPoint = "SetRemoteServerAddr")]
public static extern void SetRemoteServerAddr(Int64 nSvrPort, StringBuilder szSvrAddr);

[DllImport("JFNetLib.dll", EntryPoint = "SendRequestPack")]
public static extern Int64 SendRequestPack(StringBuilder sendbuf, Int64 sendlen, StringBuilder recvbuf, Int64 recvlen, Int64 waitsecs);
}
...全文
220 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yezeguo 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
1、把所有Int64改为Int32。因为在C++中long类型其实和int一样只是32位的
2、int cnt = (int)SendRequestPack(sbCS, sbCS.Length, sbJG, sbJG.Length, 200);
传入sbJG.Length是不对的。因为sbJG创建后只是提供了1024字节的容量,但其实际长度Length = 0。可以传入sbJG.Capacit……
[/Quote]
你太有才华了,我激动死了,终于出结果了
yezeguo 2012-05-31
  • 打赏
  • 举报
回复
反反复复看了开发文档,没有错的啊,怎么就是出不来呢,真是纠结
WAN 2012-05-31
  • 打赏
  • 举报
回复
1、把所有Int64改为Int32。因为在C++中long类型其实和int一样只是32位的
2、int cnt = (int)SendRequestPack(sbCS, sbCS.Length, sbJG, sbJG.Length, 200);
传入sbJG.Length是不对的。因为sbJG创建后只是提供了1024字节的容量,但其实际长度Length = 0。可以传入sbJG.Capacity或者小于sbJG.Capacity的实际希望读取的字节数目
yezeguo 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
先ping一个 那个服务器的端口
[/Quote]
能够Ping的通的
kiba518 2012-05-31
  • 打赏
  • 举报
回复
先ping一个 那个服务器的端口
yezeguo 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
C# code

[DllImport("JFNetLib.dll", EntryPoint = "SetRemoteServerAddr")]
public static extern void SetRemoteServerAddr(Int64 nSvrPort, string szSvrAddr);

[DllImport("JFNetLib.dll", EntryPoint = ……
[/Quote]
谢谢你,不过结果还是一样,纠结
hzpdh 2012-05-31
  • 打赏
  • 举报
回复
一般这种情况是参数类型或定义长短问题
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
[DllImport("JFNetLib.dll", EntryPoint = "SetRemoteServerAddr")]
public static extern void SetRemoteServerAddr(Int64 nSvrPort, string szSvrAddr);

[DllImport("JFNetLib.dll", EntryPoint = "SendRequestPack")]
public static extern Int64 SendRequestPack(string sendbuf, Int64 sendlen, StringBuilder recvbuf, out Int64 recvlen, Int64 waitsecs);

Int64 dk = 8800;
string sbIP = "192.168.0.80";
string sbCS = "EXCHCODE=GY01&HOSCODE=0C01";
StringBuilder sbJG = new StringBuilder(65535);
long length;
SetRemoteServerAddr(dk, sbIP);
int cnt = (int)SendRequestPack(sbCS, sbCS.Length, sbJG, out length, 200);
MessageBox.Show(cnt.ToString());
MessageBox.Show(sbJG.ToString());
yezeguo 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
public static extern Int64 SendRequestPack(StringBuilder sendbuf, Int64 sendlen, StringBuilder recvbuf, Int64 recvlen, Int64 waitsecs);
我觉得红字部分是有问题的,但是没 C++ 函数我也不敢肯定
[/Quote]
开发文档里说明如下:
1、函数体SetRemoteServerAddr(long nSvrPort, string szSvrAddr)
该函数是设置前置服务器的IP地址和端口,调用其他交易函数之前,必须保证连接状态,应用程序调用过一次以后,始终是连接状态,不需重新调用,直到应用程序结束。
2)参数说明
nSvrPort:服务器端口号,长整型
szSvrAddr:服务器地址(医院前置机内网IP地址),字符串型
3)函数返回值:无
4)结果处理:无
2、函数体Long SendRequestPack(string sendbuf, long sendlen, string recvbuf, long recvlen, long waitsecs)
该函数是向前置服务器发送一个数据请求包,当前置服务器的IP地址和端口设置完成后(即调用本功能函数前必须先调用SetRemoteServerAddr功能函数),方能被正常调用;发送交易成功后,前置服务器通讯交易服务客户端程序同时返回相应数据包给工作站。
2)参数说明
入口参数:
sendbuf:要发送的数据包,字符串型, 长度必须在65535以内
sendlen:要发送的数据包长度,取sendbuf的长度,长整型
waitsecs:超时限制(秒),请设置为≥120秒
出口参数:
recvbuf:要接收的数据包,字符串长度必须在65535以内,必须预先分配地址空间。
recvlen:要接收的数据包长度,取recvbuf的长度,长整形。
3)函数返回
返回值数据类型:long(长整型)
0:成功
1:连接医院前置机服务器失败
2:向中心服务器发送数据失败
3:接收返回结果失败
4:动态链接库不存在
4)函数返回错误常规处理
1:请检查医院前置机服务器是否已经正常开启
2:请检查医院前置服务器上的服务程序进程是否启动。
3:请检查医院客户端与医院前置机服务器之间的网络是否畅通
4:请检查医院前置机服务器与合医办前置机服务器之间的网络是否畅通
5:请检查动态链接库是否存在当前路径
6:请检查要发送的数据包是否正确
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
public static extern Int64 SendRequestPack(StringBuilder sendbuf, Int64 sendlen, StringBuilder recvbuf, Int64 recvlen, Int64 waitsecs);
我觉得红字部分是有问题的,但是没 C++ 函数我也不敢肯定
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
你最好把 C++ 的函数也贴下
yezeguo 2012-05-31
  • 打赏
  • 举报
回复
好纠结啊,大侠快帮忙啊

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧