WebService开发实例2-Delphi调用WS的DLL

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 UseWSDLthen
    begin
     RIO.WSDLLocation := Addr;
     RIO.Service := defSvc;
     RIO.Port := defPrt;
    endelse
     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识别时,多半是因为你没有加上这一句。
编译。。。

procedure TForm2.Button1Click(Sender: TObject);
type 
TIntFunc =function(pes_no,password:String):integer;stdcall;
var
  handle:Thandle;
  Tf:TIntFunc;
  Tp:TFarProc;
  i:integer;
begin
  handle := LoadLibrary(PChar('sLogin.dll'));{装载DLL}
  if handle>0 then
      try
          Tp := GetProcAddress(handle,PChar('shulib_Login'));
          if Tp<>nil
          then
          begin
                  Tf := TIntFunc(Tp);
                  i:=Tf(Trim(Edit1.Text),Trim(Edit2.Text)); {调用函数}
                  ShowMessage(IntToStr(i)) ;
          end
          else
                  ShowMessage('函数没有找到');
      finally
          FreeLibrary(handle); {释放DLL}
  end
else
  ShowMessage('dll没有找到');
end;

你可能感兴趣的:(webservice,function,String,dll,Delphi,login)