Nie jestem niestety ekspertem w Pointerach i rzadko je stosuje jeśłi nie musze. Nie wiem czy o takie coś jak poniżej Tobie chodzi, ale powinieneś pojąć ideę. Kod kompilowałem na szybko pod Delphi 7. Mam nadzieję, że tak się to powinno to robić i wszystko ok zwalniam bez wycieków.
Jakby co, to ktoś tutaj jeszcze coś Tobie lepszego pewnie doradzi. Po prostu nie można się było raczej nigdy, ani w Delphi, ani w FPC, ani nawet w starusieńkim Turbo Pascalu w taki sposób odwoływać do nieprostych typów jako parametrów dla procedur czy funkcji. Należy zrobić sobie osobny typ, tak jak to widzisz w poniższym kodzie. Dlatego zawsze masz te wszelkie typy jak PWord, PByte, PChar, czy inne typy obiektowe albo wskażniki na struktury. Zwane też pod Pascalem typami rekordowymi.
Nie wiem dlaczego tak musi być, może da się inaczej. Nie wnikam jednak. A dlaczego tak się da w językach C++ i moze w C, że wszystko uproszczamy? Też tego nie wiem i nie chcę za bardzo wnikać. To są dziwne języki, nie znam ich dobrze i nie lubię. Poza tym niestety czy tego ktoś chce czy nie, po prostu one delikatnie mówią "sux", ale to już offtopic. Każdy pisze w czym lubi i co dobrze zna. Delphi i Pascal są prostsze na start, ale niestety już niszowe. Tylko to przez politykę Borlanda, a nie jest to wina ludzi w nim piszących czy twórców wersji początkowych środowisk.
Ale jeśli ktoś tutaj nieraz z anonima może pierdzielić, że porzuccie tę starą technologie i Delphi jest do niczego. A w ogóle nie popiera tego sensownymi argumentami oraz żadnym swoim doświadczeniem, nie chce się podpisać. To ja również raz na jakiś czas mogę wyrazić swoją opinię :P Najwyżej możecie się ze mną nie zgadzać, każdy ma prawo do swojej opinii.
program cosik;
{$APPTYPE CONSOLE}
uses
Windows;
type
POleVariant = ^OleVariant;
function IntToStr(I : Longint) : string;
var
S : string[11];
begin
Str(I, S);
IntToStr := S;
end;
procedure Boom(Foo : POleVariant; Brr : PWORD);
begin
MessageBox(GetForegroundWindow, PChar(IntToStr(Brr^)), 'Oto chodzi?', MB_OK);
end;
var
Prm : PWORD;
begin
GetMem(Prm, SizeOf(PWORD));
Prm^ := 31337;
Boom(nil, PWORD(Prm));
Dispose(Prm);
end.
EDIT:
Ech, jak zwykle się rozpisałem i mnie @kAzek ubiegł. Ale spoko, przynamniej mamy dwa kody i to pierwszy od kogoś kto na pewno zna lepiej ten temat ode mnie. A i jak widać nie potrzeba deklarować sobie osobno typu, bo już większośc takich jest w modułach RTL/VCL.