在delphi不知如何调用函数,因为函数的参数是类,返回的也是类。

解决方案 »

  1.   

    附件打不开,调用webservice无非就是导入wsdl然后在调用,调用方法主要开导入后提供的调用接口定义
      

  2.   

      失踪的月亮 我已经导入了WSDL并且在Delphi中生成了unit文件,我现在的问题是,那接口函数中的参数都是类,以前没有做过啊,不知道该怎么搞,比如:代码中的一部分
    unit ALEService;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type EmptyParms           = class;                 { "urn:epcglobal:ale:wsdl:1" }
      GetSubscribers       = class;                 { "urn:epcglobal:ale:wsdl:1" }
      Poll                 = class;                 { "urn:epcglobal:ale:wsdl:1" }
      Unsubscribe          = class;                 { "urn:epcglobal:ale:wsdl:1" }
      Subscribe            = class;                 { "urn:epcglobal:ale:wsdl:1" }
      GetECSpec            = class;                 { "urn:epcglobal:ale:wsdl:1" }
      Undefine             = class;                 { "urn:epcglobal:ale:wsdl:1" }
      VoidHolder           = class;                 { "urn:epcglobal:ale:wsdl:1" }
      ALEException         = class;                 { "urn:epcglobal:ale:wsdl:1" }
      SecurityException    = class;                 { "urn:epcglobal:ale:wsdl:1"[F] }
      DuplicateNameException = class;               { "urn:epcglobal:ale:wsdl:1"[F] }
      ECSpecValidationException = class;            { "urn:epcglobal:ale:wsdl:1"[F] }
      InvalidURIException  = class;                 { "urn:epcglobal:ale:wsdl:1"[F] }
      NoSuchNameException  = class;                 { "urn:epcglobal:ale:wsdl:1"[F] }
      NoSuchSubscriberException = class;            { "urn:epcglobal:ale:wsdl:1"[F] }
      DuplicateSubscriptionException = class;       { "urn:epcglobal:ale:wsdl:1"[F] }
      ImplementationException = class;              { "urn:epcglobal:ale:wsdl:1"[F] }
      ECSpecExtension      = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECLogicalReaders     = class;                 { "urn:epcglobal:ale:xsd:1"[A] }
      ECBoundarySpecExtension = class;              { "urn:epcglobal:ale:xsd:1" }
      ECTrigger            = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECTime               = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECBoundarySpec       = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportSetSpec      = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportSpecExtension = class;                { "urn:epcglobal:ale:xsd:1" }
      ECFilterSpecExtension = class;                { "urn:epcglobal:ale:xsd:1" }
      ECIncludePatterns    = class;                 { "urn:epcglobal:ale:xsd:1"[A] }
      ECExcludePatterns    = class;                 { "urn:epcglobal:ale:xsd:1"[A] }
      ECFilterSpec         = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECGroupSpec          = class;                 { "urn:epcglobal:ale:xsd:1"[A] }
      ECReportOutputSpecExtension = class;          { "urn:epcglobal:ale:xsd:1" }
      ECReportOutputSpec   = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportSpec         = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportSpecs        = class;                 { "urn:epcglobal:ale:xsd:1"[A] }
      ECSpec               = class;                 { "urn:epcglobal:ale:xsd:1" }
      Immediate            = class;                 { "urn:epcglobal:ale:wsdl:1" }
      Define               = class;                 { "urn:epcglobal:ale:wsdl:1" }
      ECReportsExtension   = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportExtension    = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportGroupExtension = class;               { "urn:epcglobal:ale:xsd:1" }
      ECReportGroupListExtension = class;           { "urn:epcglobal:ale:xsd:1" }
      ECReportGroupListMemberExtension = class;     { "urn:epcglobal:ale:xsd:1" }
      ECReportGroupListMember = class;              { "urn:epcglobal:ale:xsd:1" }
      ECReportGroupList    = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportGroupCountExtension = class;          { "urn:epcglobal:ale:xsd:1" }
      ECReportGroupCount   = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportGroup        = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReport             = class;                 { "urn:epcglobal:ale:xsd:1" }
      ECReportList         = class;                 { "urn:epcglobal:ale:xsd:1"[A] }
      ECReports            = class;                 { "urn:epcglobal:ale:xsd:1" }
      Login                = class;                 { "urn:ale.logicalloy.com" }
      LoginResult          = class;                 { "urn:ale.logicalloy.com" }
      SessionHeader        = class;                 { "urn:ale.logicalloy.com"[H] }  { "urn:epcglobal:ale:wsdl:1" }
      ImplementationExceptionSeverity = (ERROR, SEVERE);  { "urn:epcglobal:ale:xsd:1" }
      ECReportSetEnum = (CURRENT, ADDITIONS, DELETIONS);  { "urn:epcglobal:ale:xsd:1" }
      ECTerminationCondition = (TRIGGER, DURATION, STABLE_SET, UNREQUEST);  { "urn:epcglobal:ale:xsd:1" }
      ECTimeUnit = (MS);EmptyParms = class(TRemotable)
      private
      public
        constructor Create; override;
      published
      end;  GetECSpecNames  = EmptyParms;      { "urn:epcglobal:ale:wsdl:1"[L] }
      GetStandardVersion = EmptyParms;      { "urn:epcglobal:ale:wsdl:1"[L] }
      GetStandardVersionResult =  type WideString;      { "urn:epcglobal:ale:wsdl:1"[L] }
    省略一部分
    SessionHeader = class(TSOAPHeader)
      private
        FsessionId: WideString;
      published
        property sessionId: WideString read FsessionId write FsessionId;
      end;  GetALEID        = EmptyParms;      { "urn:ale.logicalloy.com"[L] }
      GetALEIDResult  =  type WideString;      { "urn:ale.logicalloy.com"[L] }  ALEServicePortType = interface(IInvokable)
      ['{89261E5F-CB3D-B520-AB70-8D333AB656C3}']
        function  define(const parms: Define): VoidHolder; stdcall;
        function  undefine(const parms: Undefine): VoidHolder; stdcall;
        function  getECSpec(const parms: GetECSpec): GetECSpecResult; stdcall;
        function  getECSpecNames(const parms: GetECSpecNames): GetECSpecNamesResult; stdcall;
        function  subscribe(const parms: Subscribe): VoidHolder; stdcall;
        function  unsubscribe(const parms: Unsubscribe): VoidHolder; stdcall;
        function  poll(const parms: Poll): PollResult; stdcall;
        function  immediate(const parms: Immediate): ImmediateResult; stdcall;
        function  getSubscribers(const parms: GetSubscribers): GetSubscribersResult; stdcall;
        function  getStandardVersion(const parms: GetStandardVersion): GetStandardVersionResult; stdcall;
        function  getVendorVersion(const parms: GetVendorVersion): GetVendorVersionResult; stdcall;
        function  login(const parms: Login): LoginResult; stdcall;
        function  getALEID(const parms: GetALEID): GetALEIDResult; stdcall;
      end;function GetALEServicePortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ALEServicePortType;
    implementationfunction GetALEServicePortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ALEServicePortType;
    const
      defWSDL = 'E:\Study\ALE Server\ALE Server\API\src\ALEService.wsdl';
      defURL  = 'http://localhost:8080/api/services/ALEService';
      defSvc  = 'ALEService';
      defPrt  = 'ALEServicePort';
    var
      RIO: THTTPRIO;
    begin
      Result := nil;
      if (Addr = '') then
      begin
        if UseWSDL then
          Addr := defWSDL
        else
          Addr := defURL;
      end;
      if HTTPRIO = nil then
        RIO := THTTPRIO.Create(nil)
      else
        RIO := HTTPRIO;
      try
        Result := (RIO as ALEServicePortType);
        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;
    下面省略一部分。。
    我该怎么调用function  define(const parms: Define): VoidHolder; stdcall;
        function  undefine(const parms: Undefine): VoidHolder; stdcall;
        function  getECSpec(const parms: GetECSpec): GetECSpecResult; stdcall;
    这些函数,他们的参数是怎么声明的?
      

  3.   

    我用java写的web Srevices在传参数时是可以传入类的!
    你让delphi自动生成接口!
      

  4.   

    楼上的兄弟,上面的代码就是用Delphi7自动生成的接口单元哦,我的问题是在使用那些接口函数时,参数为类的怎么使用,先Create一个类吗?然后再传,还是?
      

  5.   

    如果你在Web Service中创建有类,哪么你在delphi生成接口时也会相应的创建个类,你引用单元(接口),申明一个类,就可以传啦.
    以下是MandiQ.pas
    unit MandiQ;interfaceuses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;type  Area                 = class;                 { "http://represent.area.dsc.net" }
      Unit_                = class;                 { "http://represent.area.dsc.net" }
      UserSort             = class;                 { "http://represent.area.dsc.net" }
      Area = class(TRemotable)
      private
        Fid: Integer;
        Fname: WideString;
      published
        property id: Integer read Fid write Fid;
        property name: WideString read Fname write Fname;
      end;  ArrayOfArea = array of Area;                  { "http://represent.area.dsc.net" }
      ArrayOfString = array of WideString;     procedure setDscArear(const user: Area); stdcall;先在调用的单元引用它,
    申明一个变量.var AR:Area ;
    Ar.id:='001';
    AR.name:='张三';
    如何调用setDscArear(HTTPRIO1 as 接口).setDscArear(AR);//这样就调用了Web Service啦/
      

  6.   

    你哪个rar下不下来!你可以发到[email protected]让我看看!