加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 01:14:21 所属栏目:安全 来源:网络整理
导读:c#写的WebService没问题,Delphi通过窗体调用WebService也没问题,现在需要写成DLL来调用WebSerice(因为要给别人用啊!) DLL代码: library sLogin; uses ? SysUtils, ActiveX , ? Classes, ? shulibLogin in 'shulibLogin.pas'; Function shulib_Login(pe

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读