Zapis wartości do pamięci

0

Cześć, nie za bardzo wiem, jak nazwać ten temat.
Nie mogę sobie z tym poradzić, więc pytam się mędrców.

Mam funkcję:

function mojaFunkcja(param: integer): boolean;

Ona MUSI tak wyglądać i nie można tego zmienić.
Teraz chciałbym, aby ta funkcja przekazała coś do procedury, która ją wywołuje. Jedyna możliwość to przez dodatkową zmienną, ale chciałbym tego uniknąć. Chciałbym, aby procedura, która wywołuje tą funkcje przekazała w parametrze adres pamięci, do którego ma być zapisana ta wartość. Czy jest to możliwe?

Próbowałem coś takiego:

function mojaFunkcja(param: integer): boolean;
var
  i: integer;
begin
  i:=10;
  param^:=i;
end;

procedure proc;
var
  res: integer;
begin
  mojaFunkcja(Integer(@res));
  showMessage(intToStr(res));
end;

To się oczywiście nie kompiluje. Nie wiem, czy w dobrą stronę myślę, czy to w ogóle możliwe, tak więc proszę o jakąś odpowiedź.

0
plongint(param)^:=i; // albo plongint(param)^:=10;

Wadą jest to, że to działa tylko gdy sizeof(integer)=sizeof(pointer). Jeśli piszesz w 32-bitowym Delphi, i nie zależy ci na zgodności np. z Lazarusem, to zadziała.

0

może o to chodzi

type 
  PInt=^Integer; //jest tez predefiniowany typ PInteger
function mojaFunkcja(param: PInt): boolean;
var
  i: integer;
begin
  i:=10;
  param^:=i;
end;

procedure proc;
var
  res: integer;
begin
  mojaFunkcja( @res );
  showMessage(intToStr(res));
end;
0
Azarien napisał(a)
plongint(param)^:=i; // albo plongint(param)^:=10;

Wadą jest to, że to działa tylko gdy sizeof(integer)=sizeof(pointer). Jeśli piszesz w 32-bitowym Delphi, i nie zależy ci na zgodności np. z Lazarusem, to zadziała.

Ale pójdzie coś takiego na 64 bitowej siódemce?

@Qbek - mówiłem, że nie mogę zmienić tej funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1