200分求助大神,调用C++写的dll问题

pengwen420107 2017-10-13 08:51:49
在湖南这边整个医保对接程序。公司的医疗软件是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函数设置要传参数的记录集。
...全文
381 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿辉2021 2018-10-16
  • 打赏
  • 举报
回复
c#里面开启指针操作 直接用指针 对照开发文档 别把参数类型弄做了 是指针的 必须传指针
xiaoquanruihua 2017-10-20
  • 打赏
  • 举报
回复
你要知道 char*在C#中对应的是byte[] 而不是string
xiaoquanruihua 2017-10-20
  • 打赏
  • 举报
回复
函数定义的时候long类型换成int类型 函数中需要传char *的应该是返回值吧,定义成byte[] *** 传参的时候传一个定义好长度的byte[]数组.然后返回值就是你想要的结果.这个问题我与另一家医保动态库做对接的时候遇到过,如果还有啥疑问你可以加我QQ:476124033,或许我能帮到你.
Leckun 2017-10-17
  • 打赏
  • 举报
回复
将对方文档和你写的都贴出来看看
pengwen420107 2017-10-16
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
照着他们PB程序翻译成C#的。。。。 -》你敢保证 C#的程序没有任何问题? C++方法时传的参数类型不一样导致问题的,不知道是不是这样 -》网上找些描述 C++类型在C#对应什么类型的文章看看,有发帖的功夫问题都解决的差不多。
C++数据类型对应C#数据类型这些我早试过了,我甚至还把操作系统装成32位的了,还有我就是照着PB代码翻译过来的,其次是第一步都没走通,第一步就几句代码
exception92 2017-10-16
  • 打赏
  • 举报
回复
照着他们PB程序翻译成C#的。。。。 -》你敢保证 C#的程序没有任何问题? C++方法时传的参数类型不一样导致问题的,不知道是不是这样 -》网上找些描述 C++类型在C#对应什么类型的文章看看,有发帖的功夫问题都解决的差不多。
pengwen420107 2017-10-16
  • 打赏
  • 举报
回复
怎么没人啊?

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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