本帖最后由 hu2feng 于 2014-04-11 11:04:20 编辑

解决方案 »

  1.   

    EHRSyncTransport这个函数,在DLL中导出函数是怎么定义的, 包括CallingConvertion,字符等等
      

  2.   

    4.2.4.2  接口定义
    int EHRSyncTransport (      String eventid,String body, ref  String message, ref  String result)参数  说明
    String eventid  事件编号,无需使用XML,例如:DA01
    String body  传入消息体,是指需要上传的数据
    ref String message  引用参数,用来接收服务器的返回消息,与 ResultSet.message作用一致:
    用来存放服务器返回的消息,存放服务器的返回消息,当发生错误或警告时,该
    字段存放错误消息,一般这里包含消息编号、发生时间、消息内容等信息
    注意:该参数需要客户端与分配存储空间,建议为1000 byte
    ref String result  引用参数,用来接收服务器的返回数据,与 ResultSet.result作用一致:
    输出缓冲区,用来存放服务返回的数据结果集,该字段中的内容为XML结构,XML
    根节点一定为<result>
    注意:该参数需要客户端与分配存储空间,没有建议值,需要根据具体的业务估
    算空间。
      

  3.   

    添加上CallingConvertion cdecl 
    提示:调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
      

  4.   

    4L 的接口定义是对方提供给你用的?
    pinvoke最好是能看到C++ 标准的导出函数申明,否则还真不能确定申明问题