Pourquoi cette écriture : (pB + 1)^ := 0; crache une erreur ?

adipie Messages postés 2 Date d'inscription dimanche 7 février 2010 Statut Membre Dernière intervention 18 mai 2020 - Modifié le 18 mai 2020 à 14:03
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 18 mai 2020 à 10:40
Bonjour,
Qui peut m'indiquer pourquoi cette écriture : (pB + 1)^ := 0; donne une erreur de compilation ?

function THidRlyForm.GetButtonStatus: Byte;
var
  Btns:  TRLButtons;
  Dev: TAntHidDevice;
  pB: pByte;
  Status: Boolean;
  Sb, i: Byte;
begin
  if lbBoards.Count > 0 then
  begin
    Dev := TAntHidDevice(lbBoards.Items.Objects[lbBoards.ItemIndex]);

    try
      pB := AllocMem(10);

       pB^      := 0;
      (pB + 1)^ := 0; Erreur ?????????????????????????????????????????????????
      (pB + 2)^ := 0;

      Status := Dev.GetFeature(pB^, 9);
      if Status  then
      begin
        Sb := (pB + 8)^;
        InitButtons(Btns);

        for i := 0 to 7 do
        begin
          Btns.Buttons[(i * 2)    ].Down :=     Boolean(Sb and 1);
          Btns.Buttons[(i * 2) + 1].Down := not Boolean(Sb and 1);
          Sb := Sb shr 1;
        end;
      end;
    finally
      FreeMem(pB);
    end;
  end;
end;

1 réponse

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
Modifié le 28 mai 2020 à 15:29
Bonjour,

tu ne peux pas directement incrémenter le pointeur de cette manière:

  try
    pb^ := 0;
    PByte(Cardinal(pb)+1)^ := 0;
    PByte(Cardinal(pb)+2)^ := 0;
  finally
    FreeMem(Pb)
  end;


Cordialement,

0
Rejoignez-nous