加载中…
个人资料
小胖和猪猪
小胖和猪猪
  • 博客等级:
  • 博客积分:0
  • 博客访问:96,093
  • 关注人气:111
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

猪猪编程:WebService开发实例2-Delphi调用WS的DLL

(2010-12-07 13:09:22)
标签:

delphi

webservice

c

it

分类: 计算机

c#写的WebService没问题,Delphi通过窗体调用WebService也没问题,现在需要写成DLL来调用WebSerice(因为要给别人用啊!)

DLL代码:

library sLogin;

uses
  SysUtils, ActiveX,
  Classes,
  shulibLogin in 'shulibLogin.pas';

Function shulib_Login(pers_no,password:String):integer;stdcall ;
var
  i:integer;
begin
   coinitialize(nil);
  try
    i:= GetshulibLoginSoap.CheckUserLogin(Trim(pers_no),Trim(password));
  except
    i:=6;
  end;
  Result := i;
 CoUnInitialize();
end;
{$R *.res}

exports
    shulib_Login ;
begin

end.

GetshulibLoginSoap是WSDL Import自动产生的,另外不需要外加THTTPRIO控件。

自动产生的shulibLogin.pas需要修改两个地方

 try
   //RIO.HTTPWebNode.UseUTF8InHeader:=True; 中文参数
    Result := (RIO as shulibLoginSoap);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


initialization
  InvRegistry.RegisterInterface(TypeInfo(shulibLoginSoap), 'www.lib.shu.edu.cn', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(shulibLoginSoap), 'www.lib.shu.edu.cn/CheckUserLogin');
  InvRegistry.RegisterInvokeOptions(TypeInfo(shulibLoginSoap), ioDocument);

1.RIO.HTTPWebNode.UseUTF8InHeader:=True;对于中文参数必须加上 
2.InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument); 如果传入的参数不能被webservice识别时,多半是因为你没有加上这一句。
编译。。。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有