本帖最后由 lonelyboySVC 于 2011-07-28 11:47:50 编辑

解决方案 »

  1.   

    你把stdcall改成cdecl试试,stdcall是Pascal默认的压栈方式
      

  2.   

    个人觉得这个webservice的login函数内部实现可能有点问题,
    调用getDeviceLst这个函数是没问题的,能正常返回结果。
    这个webservice是你自己写的吗?
      

  3.   

    你好,感谢你的回复。正如你所说,调用getDeviceLst这个函数是没问题的,能正常返回结果。需要参数的login方法就调用失败了。这个webservice不是我写的,所以不能贴上代码供大家查看。那导致这个异常的原因一般是什么问题呢?
      

  4.   

    调用方式我试了一下,也是不行,不管是pascal,还是cdecl都报同样的异常。
      

  5.   

    我帮你看了下wsdl文件,里面写着调用方式是document,而不是rpc
    style="document" - <wsdl:binding name="DataAccessWSImplServiceSoapBinding" type="tns:DataAccessWS">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />那么应该加入下面这句的。InvRegistry.RegisterInvokeOptions(TypeInfo(DataAccessWS), ioDocument);现在情况恰好相反,注释掉这句就没问题了,你可以试试,至于具体原因不是很清楚,你可以上网查查资料。
      

  6.   

    估计你用的Delphi是6或7,这个时候的delphi有好些功能都支持的不好。
    因为那九年是webservice兴起的时候,各家的标准都都有些区别。
    弄得互相支持的很差劲。
    这几年支持的比较好了。