Erro de Access Violation

26/09/2004

Por favor, me ajudem. Tenho o seguinte código de definições de tipos:
type
  Long = Longint;

  ERRORMSG=record
  bErrClass,bErrCode,bAddHi,bAddLo:byte;
  end;

  PService = ^TService;

  TService = record
    bService, fShortCnf: byte;
    wTargetAddress: Word;
    wIndex, wDataLength: Word;
    bTeleType: byte;
    Data: record
        lDate: Long;
        abData: array[0..9&93; of Byte;
    end;
    awPA, awPE: array&91;0..9&93; of Word;
    fpbDataPointer: PChar;
    abReserve: array&91;0..9&93; of Byte;
    Error: ERRORMSG;
  end;


Quando eu vou utilizar esses tipos no código abaixo o programa gera um erro de Access Violation.

var
   Servico:PService;
begin
   Servico.bService:=3;
   Servico.fShortCnf:=0;
   Servico.wTargetAddress:=0;
   Servico.wIndex:=11005;
   Servico.wDataLength:=0;
   Servico.bTeleType:=$80;
   Servico.Data.lDate:=3;
end;


Alguém sabe onde está o erro deste código?


Dan.sm

Respostas

26/09/2004

Alysson

Axei 2 erros......

1: a definição do PService = ^TService tem q ficar depois da definicao Tservice.. assim:


type 
  Long = Longint; 

  ERRORMSG=record 
  bErrClass,bErrCode,bAddHi,bAddLo:byte; 
  end; 

  TService = record 
    bService, fShortCnf: byte; 
    wTargetAddress: Word; 
    wIndex, wDataLength: Word; 
    bTeleType: byte; 
    Data: record 
        lDate: Long; 
        abData: array[0..9&93; of Byte; 
    end; 
    awPA, awPE: array&91;0..9&93; of Word; 
    fpbDataPointer: PChar; 
    abReserve: array&91;0..9&93; of Byte; 
    Error: ERRORMSG; 
  end;

  PService = ^TService; 
----------------------------------------------------------------------
e a outra:

var 
   Servico:PService; 
begin


{kra por ser um Pointer, vc tem q reservar um espaco na memória ram com isso:}

GetMem(Servico,Sizeof(TService));

{se der erro, tente   GetMem(Servico,Sizeof(PService));.
se continuar dando erro, tente GetMem(Servico);

to falando q se der erro, pq n to com delphi aberto...

       }

 
   Servico.bService:=3; 
   Servico.fShortCnf:=0; 
   Servico.wTargetAddress:=0; 
   Servico.wIndex:=11005; 
   Servico.wDataLength:=0; 
   Servico.bTeleType:=$80; 
   Servico.Data.lDate:=3; 
end;



Responder Citar

26/09/2004

Dan.sm

Valeu, o problema estava mesmo na hora de eu atribuir um valor sem ter alocado memória. :wink:


Responder Citar