首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

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

C#调用新农医系统第三方接口VC动态库,参数返回值为空,求解,JFNetLib,SetRemoteServerAddr,SendRequestPack
代码如下:
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);
}

[解决办法]

C# code
[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());
[解决办法]
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的实际希望读取的字节数目

热点排行