200分求助大神,调用C++写的dll问题
在湖南这边整个医保对接程序。公司的医疗软件是asp.net开发的BS程序,医保中心给的动态库dll是C++开发的,那么问题来了。
string err = "";
long ll_return;
int li_ret = -1; //函数返回值
string ls_server = "10.137.67.246";
int ll_port = 7001;
string ls_servlet = "Insur_XT/ProcessAll";
//初始化
gl_pinterface = newinterfacewithinit(ls_server, ll_port, ls_servlet);
string ls_func_id = "0"; //功能号
ll_return = Start(gl_pinterface, ls_func_id);
if (ll_return < 0)
return li_ret;//
if (put(gl_pinterface, 1, " oper_centerid", "430201") < 0)
return li_ret;
if (put(gl_pinterface, 1, " oper_hospitalid", "43020150574") < 0)
return li_ret;
if (put(gl_pinterface, 1, " oper_staffid", "sys") < 0)
return li_ret;
//设置参数
if (put(gl_pinterface, 1, " login_id", "43020150574") < 0)
return li_ret;
if (put(gl_pinterface, 1, " login_password", "43020150574") < 0)
return li_ret;
//运行
ll_return = run(gl_pinterface);
[DllImport("../bin/InterfaceHN.dll",
EntryPoint = "newinterfacewithinit",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern long newinterfacewithinit(string Addr, int Port, string Servlet);
[DllImport("../bin/InterfaceHN.dll",
EntryPoint = "put",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern long put(long p_inter, long row, string p_name, string p_value);
[DllImport("../bin/InterfaceHN.dll",
EntryPoint = "run",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern long run(long p_inter);
代码编译不报错,但是获取的返回值不对,医保中心使用PB开发的程序put()方法正常返回值是1,而我这段put()方法返回值为一长串数字,导致下面程序走不通,我照着他们PB程序翻译成C#的。。。。实在找不出问题,我现在怀疑我调用C++方法时传的参数类型不一样导致问题的,不知道是不是这样,来大神帮我看看。
下面这个是这个方法的开发文档,C++的。
还有谁有做过湖南这边创智公司的医保对接?
2.1.6long put(Interface *p_inter, long row, char *p_name, char *p_value)
该函数用来在一次接口调用中传入业务所需的参数,参数p_inter为函数newinterface()或者newinterfacewithinit的返回值,row为多行参数的行号,p_name为参数名称,以字符串小写表示,p_value为参数值,可以是字符串和数值型。返回-1表示没有Put成功,返回大于零表示Put成功 ,此值同时为当前的行号。如果入参有多个记录集,可用setresultset函数设置要传参数的记录集。
string err = "";
long ll_return;
int li_ret = -1; //函数返回值
string ls_server = "10.137.67.246";
int ll_port = 7001;
string ls_servlet = "Insur_XT/ProcessAll";
//初始化
gl_pinterface = newinterfacewithinit(ls_server, ll_port, ls_servlet);
string ls_func_id = "0"; //功能号
ll_return = Start(gl_pinterface, ls_func_id);
if (ll_return < 0)
return li_ret;//
if (put(gl_pinterface, 1, " oper_centerid", "430201") < 0)
return li_ret;
if (put(gl_pinterface, 1, " oper_hospitalid", "43020150574") < 0)
return li_ret;
if (put(gl_pinterface, 1, " oper_staffid", "sys") < 0)
return li_ret;
//设置参数
if (put(gl_pinterface, 1, " login_id", "43020150574") < 0)
return li_ret;
if (put(gl_pinterface, 1, " login_password", "43020150574") < 0)
return li_ret;
//运行
ll_return = run(gl_pinterface);
[DllImport("../bin/InterfaceHN.dll",
EntryPoint = "newinterfacewithinit",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern long newinterfacewithinit(string Addr, int Port, string Servlet);
[DllImport("../bin/InterfaceHN.dll",
EntryPoint = "put",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern long put(long p_inter, long row, string p_name, string p_value);
[DllImport("../bin/InterfaceHN.dll",
EntryPoint = "run",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern long run(long p_inter);
代码编译不报错,但是获取的返回值不对,医保中心使用PB开发的程序put()方法正常返回值是1,而我这段put()方法返回值为一长串数字,导致下面程序走不通,我照着他们PB程序翻译成C#的。。。。实在找不出问题,我现在怀疑我调用C++方法时传的参数类型不一样导致问题的,不知道是不是这样,来大神帮我看看。
下面这个是这个方法的开发文档,C++的。
还有谁有做过湖南这边创智公司的医保对接?
2.1.6long put(Interface *p_inter, long row, char *p_name, char *p_value)
该函数用来在一次接口调用中传入业务所需的参数,参数p_inter为函数newinterface()或者newinterfacewithinit的返回值,row为多行参数的行号,p_name为参数名称,以字符串小写表示,p_value为参数值,可以是字符串和数值型。返回-1表示没有Put成功,返回大于零表示Put成功 ,此值同时为当前的行号。如果入参有多个记录集,可用setresultset函数设置要传参数的记录集。
...全文
相关推荐
Matlab调用cpp+opencv库心得
Matlab调用cpp+opencv库心得
网页调用ocx,ocx调用dll
编写一个html网页文件,调用C++编写的ocx文件,编写一个com组件产生ocx,ocx调用C++编写产生的dll文件。
西门子 S7-200 PLC 通信DLL
最新版本的驱动。 开发工控程序时使用自由口协议比较麻烦,效率也不高,PPI的协议要么付费要么不公开要么不好用,在网上找了一下也没捷径,算了,自己搞,经过1个礼拜的劳作,用VC搞了此DLL用于西门子S7-200 PLC的通信,在vc,delphi,vb,C#.NET平台进行测试,效果不错啊,开发效率提高数倍,特此与爱好者分享,附带源码,独家奉献:
MFCDLL.rar_MFCdll_mfc d_mfc 调用MFCdll_mfc 调用dll_visual Studio 200
使用MFC写DLL的程序,编译后可以生成DLL文件。可以被其它程序调用。谢谢~
基于java实现的c++动态链接库调用案例
基于java实现的c++动态链接库调用案例。该项目主要技术点就是有C++编写串口读写实现,以DLL动态链接库的形式提供接口,由java调用动态链接库接口实现串口消息发送。


