Web Service erro Access Violation no cliente
Boa noite pessoal, estou estudando sobre WebService porém esta ocorrendo que se eu retorno String funciona blz, porém quando tento retornar uma array de string tenho problemas de access violation, alguém poderia me informar onde estou errando.. obrigado desde já.
DLL DO SERVIDOR
---------------------------
type
ArrayString = array of ShortString; <<<<<<------------------- JA TENTEI COM STRING, WIDESTRING, SHORTSTRING
...
IwsDataModule = interface(IAppServerSOAP)
['{C261E6DF-E6F6-43EF-B5EE-4267CA176890}']
function BuscaEndereco(const _cep, _caminho : String) : ArrayString; stdcall;
end;
TwsDataModule = class(TSoapDataModule, IwsDataModule, IAppServerSOAP, IAppServer)
private
function BuscaEndereco(const _cep, _caminho : String) : ArrayString; stdcall;
public
end;
implementation
{$R *.DFM}
procedure TwsDataModuleCreateInstance(out obj: TObject);
begin
obj := TwsDataModule.Create(nil);
end;
{ TwsDataModule }
function TwsDataModule.BuscaEndereco(const _cep, _caminho: String): ArrayString;
var
_End : ArrayString;
begin
if _cep = 'VIZINHO' then
begin
_End[0] := 'ZERO';
_End[1] := 'PRIMEIRO';
Result := _End;
end
else
begin
_End[0] := 'VAZIO';
Result := _End;
end;
end;
initialization
InvRegistry.RegisterInvokableClass(TwsDataModule, TwsDataModuleCreateInstance);
....
CODIGO DO CLIENTE
-------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
_end1 : ArrayString;
_cep : String;
begin
try
_cep := edCEP.Text;
_end1 := (httpRioCep as IwsDataModule).BuscaEndereco(_cep, '');
edEndereco0.Text := _end1[0];
edEndereco1.Text := _end1[1];
except
On E: Exception Do
ShowMessage(e.Message);
end;
end;
DLL DO SERVIDOR
---------------------------
type
ArrayString = array of ShortString; <<<<<<------------------- JA TENTEI COM STRING, WIDESTRING, SHORTSTRING
...
IwsDataModule = interface(IAppServerSOAP)
['{C261E6DF-E6F6-43EF-B5EE-4267CA176890}']
function BuscaEndereco(const _cep, _caminho : String) : ArrayString; stdcall;
end;
TwsDataModule = class(TSoapDataModule, IwsDataModule, IAppServerSOAP, IAppServer)
private
function BuscaEndereco(const _cep, _caminho : String) : ArrayString; stdcall;
public
end;
implementation
{$R *.DFM}
procedure TwsDataModuleCreateInstance(out obj: TObject);
begin
obj := TwsDataModule.Create(nil);
end;
{ TwsDataModule }
function TwsDataModule.BuscaEndereco(const _cep, _caminho: String): ArrayString;
var
_End : ArrayString;
begin
if _cep = 'VIZINHO' then
begin
_End[0] := 'ZERO';
_End[1] := 'PRIMEIRO';
Result := _End;
end
else
begin
_End[0] := 'VAZIO';
Result := _End;
end;
end;
initialization
InvRegistry.RegisterInvokableClass(TwsDataModule, TwsDataModuleCreateInstance);
....
CODIGO DO CLIENTE
-------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
_end1 : ArrayString;
_cep : String;
begin
try
_cep := edCEP.Text;
_end1 := (httpRioCep as IwsDataModule).BuscaEndereco(_cep, '');
edEndereco0.Text := _end1[0];
edEndereco1.Text := _end1[1];
except
On E: Exception Do
ShowMessage(e.Message);
end;
end;
Ricardo Matarazzo
Curtidas 0
Respostas
Ricardo Matarazzo
19/06/2014
Olá pessoal, identifiquei que é alguam coisa relacionado ao invocar a classe, alguém tem algum material de como fazer isso com classes complexas no webservice? pois procurei é soh encontro sobre as primarias
grato
grato
GOSTEI 0
Ricardo Matarazzo
19/06/2014
Niguem tem uma sugestão!?? ou algum material?? os da dev já olhei e não encontrei nenhum que mostre como usar classes complexas!?
GOSTEI 0