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

Signaler
Messages postés
2
Date d'inscription
dimanche 7 février 2010
Statut
Membre
Dernière intervention
18 mai 2020
-
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
-
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

Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
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,