Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.27;
Скачать: [xml.tar.bz2];

Вниз

ошибка при компиляции   Найти похожие ветки 

 
adminmax ©   (2010-12-26 07:55) [0]

При компилировании выдается ошибка: types of actual and formal var parameters must be identical

procedure TForm1.Button1Click(Sender: TObject);
const
 login = "LOG";
 pwd = "PWD";
var
 ws: DEVINOSoap;
 Ballance : Variant;
 ComandStatus: CommandStatus;
begin
 ws := GetDEVINOSoap();
 with ws do
 GetCreditBalance(login, pwd, ComandStatus, Ballance);

end;

А вот описание самой процедуры:

procedure GetCreditBalance(const smsUser: WideString; const password: WideString; out GetCreditBalanceResult: CommandStatus; out creditBalance: TXSDecimal); stdcall;

Компилятор ругается вот на эту строку: GetCreditBalance(login, pwd, ComandStatus, Ballance);
Подскажите пожалуйста, что я не так делаю, в чем ошибка?


 
sniknik ©   (2010-12-26 10:44) [1]

> Ballance : Variant;
> out creditBalance: TXSDecimal
> types of actual and formal var parameters must be identical


 
Anatoly Podgoretsky ©   (2010-12-26 11:32) [2]

> adminmax  (26.12.2010 07:55:00)  [0]

В том, что актуальные параметры неиндетичны формальным.


 
adminmax ©   (2010-12-27 04:43) [3]

Если написать так:
var
Ballance : TXSDecimal;

тогда компилятор выводит ошибку:
Undeclared identifier: "TXSDecimal"

Подскажите, что это за тип и как с ним работать?


 
MBo ©   (2010-12-27 05:58) [4]

>Подскажите, что это за тип и как с ним работать?
Где функцию взял, там и информацию надо искать


 
Плохиш ©   (2010-12-27 12:14) [5]


> Подскажите, что это за тип и как с ним работать?

Взять в веб-сервисах


 
adminmax ©   (2010-12-28 04:41) [6]


> Плохиш ©   (27.12.10 12:14) [5]
>
>
> > Подскажите, что это за тип и как с ним работать?
>
> Взять в веб-сервисах

Что именно взять то нужно? HTTPRIO уже используется


 
Ega23 ©   (2010-12-28 08:01) [7]


> Что именно взять то нужно?


Нужно объявить переменную типа TXSDecimal. В неё будет выдан второй их out-параметров процедуры GetCreditBalance.
А что это за тип, где он объявлен, как с ним работать и что там вообще к чему - узнавай у автора процедуры GetCreditBalance


 
brother ©   (2010-12-28 08:02) [8]

ищи где описан GetCreditBalance и найдешь в каком юните он описан, сдается мне... это простой record...


 
brother ©   (2010-12-28 08:03) [9]

> и найдешь в каком юните он описан

читать как: и найдешь в каком юните описан TXSDecimal
зы. ега опередил)


 
brother ©   (2010-12-28 08:06) [10]

по гуглу вот что нашел:
http://delphi.wikia.com/wiki/TXSDecimal_Class


 
adminmax ©   (2010-12-28 08:27) [11]

Вот текст этого юнита... но описания этого класса там нет :(

// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : http://gw1.streamsms.ru/WebService.asmx?wsdl
// Encoding : utf-8
// Version  : 1.0
// (25.12.2010 18:15:41 - 1.33.2.5)
// ************************************************************************ //

unit WebService;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

 // ************************************************************************ //
 // The following types, referred to in the WSDL document are not being represented
 // in this file. They are either aliases[@] of other types represented or were referred
 // to but never[!] declared in the document. The types from the latter category
 // typically map to predefined/known XML or Borland types; however, they could also
 // indicate incorrect WSDL documents that failed to declare or import a schema type.
 // ************************************************************************ //
 // !:string          - "http://www.w3.org/2001/XMLSchema"
 // !:decimal         - "http://www.w3.org/2001/XMLSchema"
 // !:boolean         - "http://www.w3.org/2001/XMLSchema"
 // !:int             - "http://www.w3.org/2001/XMLSchema"
 // !:dateTime        - "http://www.w3.org/2001/XMLSchema"

 { "http://gw1.devinosms.com/WebService.asmx" }
 CommandStatus = (
     OK_Operation_Completed,
     Error_Not_Enough_Credits,
     Error_Message_Rejected,
     Error_Invalid_Source_Address,
     Error_Invalid_Destination_Address,
     Error_SMS_User_Disabled,
     Error_Invalid_MessageID,
     Error_Invalid_Header,
     Error_Invalid_Login,
     Error_Invalid_Password,
     Error_Unauthorised_IP_Address,
     Error_Invalid_Activation_Code,
     Error_SMS_User_Not_Activated,
     Error_Message_Queue_Full,
     Error_Gateway_Offline,
     Error_Gateway_Busy,
     Error_Database_Offline,
     Error_No_Messages_Selected,
     Error_Outbox_Empty
);

 { "http://gw1.devinosms.com/WebService.asmx" }
 MessageState = (
     Enqueued,
     Sending,
     Delivered_To_Gateway,
     Sent,
     Delivered_To_Recipient,
     Error_Invalid_Destination_Address2,
     Error_Invalid_Source_Address2,
     Error_Incompatible_Destination,
     Error_Rejected,
     Error_Expired,
     Unknown
);

 ArrayOfString = array of WideString;          { "http://gw1.devinosms.com/WebService.asmx" }

 // ************************************************************************ //
 // Namespace : http://gw1.devinosms.com/WebService.asmx
 // soapAction: http://gw1.devinosms.com/WebService.asmx/%operationName%
 // transport : http://schemas.xmlsoap.org/soap/http
 // binding   : DEVINOSoap
 // service   : DEVINO
 // port      : DEVINOSoap
 // URL       : http://gw1.streamsms.ru/WebService.asmx
 // ************************************************************************ //
 DEVINOSoap = interface(IInvokable)
 ["{4B016AD2-4E02-7B0E-4BE6-B469158AB809}"]
   procedure GetCreditBalance(const smsUser: String; const password: String; out GetCreditBalanceResult: CommandStatus; out creditBalance: integer); stdcall;
   procedure SendTextMessage(const smsUser: WideString; const password: WideString; const destinationAddress: WideString; const messageData: WideString; const sourceAddress: WideString; const deliveryReport: Boolean; const flashMessage: Boolean; const validityPeriod: Integer; out SendTextMessageResult: CommandStatus; out messageId: ArrayOfString
                             ); stdcall;
   procedure GetMessageState(const smsUser: WideString; const password: WideString; const messageId: WideString; out GetMessageStateResult: CommandStatus; out reportedDateUtc: TXSDateTime; out messageState: MessageState); stdcall;
   procedure SendWapPushSMS(const smsUser: WideString; const password: WideString; const destinationAddress: WideString; const WapUrl: WideString; const DescriptionText: WideString; const sourceAddress: WideString; const deliveryReport: Boolean; out SendWapPushSMSResult: CommandStatus; out messageId: ArrayOfString); stdcall;
   procedure GetMessageState2(const smsUser: WideString; const password: WideString; const messageId: WideString; out GetMessageState2Result: CommandStatus; out reportedDateUtc: TXSDateTime; out messageState: MessageState); stdcall;
 end;

function GetDEVINOSoap(UseWSDL: Boolean=System.False; Addr: string=""; HTTPRIO: THTTPRIO = nil): DEVINOSoap;

implementation

function GetDEVINOSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): DEVINOSoap;
const
 defWSDL = "http://gw1.streamsms.ru/WebService.asmx?wsdl";
 defURL  = "http://gw1.streamsms.ru/WebService.asmx";
 defSvc  = "DEVINO";
 defPrt  = "DEVINOSoap";
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 DEVINOSoap);
   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(DEVINOSoap), "http://gw1.devinosms.com/WebService.asmx", "utf-8");
 InvRegistry.RegisterDefaultSOAPAction(TypeInfo(DEVINOSoap), "http://gw1.devinosms.com/WebService.asmx/%operationName%");
 RemClassRegistry.RegisterXSInfo(TypeInfo(CommandStatus), "http://gw1.devinosms.com/WebService.asmx", "CommandStatus");
 RemClassRegistry.RegisterXSInfo(TypeInfo(MessageState), "http://gw1.devinosms.com/WebService.asmx", "MessageState");
 RemClassRegistry.RegisterExternalPropName(TypeInfo(MessageState), "Error_Invalid_Destination_Address2", "Error_Invalid_Destination_Address");
 RemClassRegistry.RegisterExternalPropName(TypeInfo(MessageState), "Error_Invalid_Source_Address2", "Error_Invalid_Source_Address");
 RemClassRegistry.RegisterXSInfo(TypeInfo(ArrayOfString), "http://gw1.devinosms.com/WebService.asmx", "ArrayOfString");

end.


 
adminmax ©   (2010-12-28 08:30) [12]

Текст этого юнита был сгенерирован WSDLimporter-ом


 
Ega23 ©   (2010-12-28 08:31) [13]

DEVINOSoap = interface(IInvokable)
["{4B016AD2-4E02-7B0E-4BE6-B469158AB809}"]
  procedure GetCreditBalance(const smsUser: String; const password: String; out GetCreditBalanceResult: CommandStatus; out creditBalance: integer); stdcall;


Как тебя понимать, Саид?


 
brother ©   (2010-12-28 08:31) [14]

> uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

думаю, он там


 
Palladin ©   (2010-12-28 08:33) [15]

понимать его так... очередной "понт" взялся написать крутую "прогу", взаимодействующую с веб-сервисом какой нибудь платежной системы...


 
sniknik ©   (2010-12-28 09:34) [16]

>  думаю, он там
если бы не сообщение выше... а где уверенность, что он там, тот же самый, что в "его" модуле. и то, что "его" модуль на дельфи написан (там это вообще класс).


 
adminmax ©   (2010-12-28 09:48) [17]


> Как тебя понимать, Саид?

Просто пока ответа ждал, немного эксперементировал... поменял TXSDecimal на integer


> очередной "понт" взялся написать крутую "прогу", взаимодействующую
> с веб-сервисом какой нибудь платежной системы...

Не совсем "платежной" системы... эта прога для взаимодействия с сервисом www.streamsms.ru для рассылки СМС сообщений
Все мы когда то что то в первый раз делали, поэтому совета и спрашивал, так что, могли бы и без оскорблений!


> думаю, он там

Да. спасибо за подсказку! Он действительно там:

{ TXSDecimal }
{ Rudimentary support (strictly to handle xsd:decimal) for now }
TXSDecimal = class(TRemotableXS)
 private
   FDecimalString: string;
   function GetAsBcd: TBcd;
   procedure SetAsBcd(const Value: TBcd);
 public
   procedure XSToNative(Value: WideString); override;
   function  NativeToXS: WideString; override;
   property  DecimalString: string read FDecimalString write FDecimalString;
   property  AsBcd: TBcd read GetAsBcd write SetAsBcd;
end;

Добавил юнит XSBuiltIns в раздел Uses
Теперь все компилируется нормально.
Но при попытке выполнить процедуру GetCreditBalance программа вылетает с ошибкой:
Debugger Exception Notification
Project Project1.exe raised exception class EAccessVolation with message "Access voilation at address 004036FC in module "Project1.exe". Read of address 0575C060". Process stopped. Use Step or Run to continue.
Подскажите из за чего это может быть?


 
Ega23 ©   (2010-12-28 10:20) [18]


> Подскажите из за чего это может быть?


creditBalance = nil


 
Плохиш ©   (2010-12-28 11:50) [19]


> Подскажите из за чего это может быть?

Вопрос про это исключение задаëтся здесь каждые пару недель.

PS. Нафига оно тебе это программирование?


 
Плохиш ©   (2010-12-28 11:59) [20]

И вообще, создание клиентов для веб-сервисов подробно описано в руководстве разработчика и справке, поставляеммых с указанной D7.


 
sniknik ©   (2010-12-28 14:51) [21]

> creditBalance = nil
скорее не инициализировано, но значение есть т.к. переменная локальная, nil в принципе должно понимать (другая ошибка бы была), хотя, как написано конечно.

> Подскажите из за чего это может быть?
еще один вариант писал раньше, типы не равны несмотря на то что одинаково названы... тут инициализация не поможет.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.03.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.004 c
15-1291835265
И. Павел
2010-12-08 22:07
2011.03.27
Везде халтура :)


15-1290889921
set
2010-11-27 23:32
2011.03.27
Атрибуты на папках


3-1255705719
IOrist
2009-10-16 19:08
2011.03.27
Как отобразить поля в гриде без гемора?


1-1249831819
dmitry_12_08_73
2009-08-09 19:30
2011.03.27
Как скопировать клиентскую область окна в bitmap


15-1291930198
Юрий
2010-12-10 00:29
2011.03.27
С днем рождения ! 10 декабря 2010 пятница





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский