![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с веб-сервисом.
Kolan © (2008-07-29 17:21:00)Здравствуйте,
Пробую воспользоватьс веб-сервисом RSDN ( http://www.rsdn.ru/ws/janusAT.asmx?WSDL).
С помощью BDS 2006 создал Web service -> WSDL Inporter. Все сгенерировалось. Интерфейс такой:
JanusATSoap = interface(IInvokable)
['{F931A43E-480A-68B9-5A5F-E770117BFE0C}']
function GetTopicByMessage(const topicRequest: TopicRequest): TopicResponse; stdcall;
function GetNewData(const changeRequest: ChangeRequest): ChangeResponse; stdcall;
function GetForumList(const forumRequest: ForumRequest): ForumResponse; stdcall;
function GetNewUsers(const userRequest: UserRequest): UserResponse; stdcall;
procedure PostChange(const postRequest: PostRequest); stdcall;
function PostChangeCommit: PostResponse; stdcall;
procedure Check; stdcall;
end;
Теперь патаюсь что-нить вызвать.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
R: UserRequest;
A: UserResponse;
I: Integer;
P: PostResponse;
begin
R := UserRequest.Create;
try
R.userName := UserNameEdit.Text;
R.password := PasswordEdit.Text;
R.maxOutput := 1;
A := GetJanusATSoap.GetNewUsers(R);
for I := Low(A.users) to High(A.users) do
Memo1.Lines.Add(A.users[I].userName);
finally
R.Free;
end;
end;
На что получаю ошибку:
Object reference not set to an instance of an object
Что я делаю не так?
ЗЫ
ВызовCheck;срабатывает.
Kolan (2008-08-02 16:39:00) [1]up
Kolan (2008-07-30 11:54:00) [2]> Проверьте работоспособность методов, обходящихся без WideString
Check не ругается, но он без параметров.
> также присутствие обработки этого типа в исходном коде VCL
Как это сделать? И что подразумевается под VCL, сгенерированный код? Или вы предлагаете смотреть генофонд? Что там искать?
Alucard (2008-07-30 00:14:00) [3]Проблема может быть в использовании WideString. Не могу сказать о BDS2006, но в более ранних версиях она была. Проверьте работоспособность методов, обходящихся без WideString, а также присутствие обработки этого типа в исходном коде VCL.
Kolan (2008-07-29 17:27:00) [4]Использующиеся классы:
UserRequest= class(TRemotable)
private
FuserName: WideString;
Fpassword: WideString;
FlastRowVersion: TByteDynArray;
FmaxOutput: Integer;
published
property userName: WideString read FuserName write FuserName;
property password: WideString read Fpassword write Fpassword;
property lastRowVersion: TByteDynArray read FlastRowVersion write FlastRowVersion;
property maxOutput: Integer read FmaxOutput write FmaxOutput;
end;
UserResponse= class(TRemotable)
private
FlastRowVersion: TByteDynArray;
Fusers: ArrayOfJanusUserInfo;
public
destructor Destroy; override;
published
property lastRowVersion: TByteDynArray read FlastRowVersion write FlastRowVersion;
property users: ArrayOfJanusUserInfo read Fusers write Fusers;
end;
PostResponse= class(TRemotable)
private
FcommitedIds: ArrayOfInt;
Fexceptions: ArrayOfPostExceptionInfo;
FcommitedRatingIds: ArrayOfInt;
FratingExceptions: ArrayOfRatingExceptionInfo;
FcommitedModerateIds: ArrayOfInt;
FmoderateExceptions: ArrayOfModerateExceptionInfo;
public
destructor Destroy; override;
published
property commitedIds: ArrayOfInt read FcommitedIds write FcommitedIds;
property exceptions: ArrayOfPostExceptionInfo read Fexceptions write Fexceptions;
property commitedRatingIds: ArrayOfInt read FcommitedRatingIds write FcommitedRatingIds;
property ratingExceptions: ArrayOfRatingExceptionInfo read FratingExceptions write FratingExceptions;
property commitedModerateIds: ArrayOfInt read FcommitedModerateIds write FcommitedModerateIds;
property moderateExceptions: ArrayOfModerateExceptionInfo read FmoderateExceptions write FmoderateExceptions;
end;