pointer

0

mam dany pointer wskazujący na jakiś tam ciąg danych...
za cel mam odczytanie lub zapisanie zmiennej (o danym typie np:single) która jest oddalona o daną liczbę bajtów od początku danych na które wskazuje mój pointer... jak to zrobić?

0

p: Pointer;
s: Single;
Offset: Byte;

Single(Pointer(Integer(p)+Offset)^) := s;

Coś takiego. To jedna z kilku rzeczy która w Pascalu dobija mnie, że nie można operować na wskaźnikach jak na zwykłych liczbach (chociaż jest to konieczne aby zachować najważniejszą zaletę Pascala: kontrolę typów).

0

niestety wywala błąd: access violation (nasz ulubiony typ błędów :-/ )
mam to w takiej procedurze (dot. DirectX ale mniejsza z tym... chodzi o odwołanie się do danych za pomocą wskaźnika:

[code]procedure Move(nrob:cardinal;x,y,z:Single);
var p:pointer;
a:Cardinal;
versize:Cardinal;
begin
World[nrob].Mesh.LockVertexBuffer(0,p);
versize:=World[nrob].Mesh.GetNumBytesPerVertex;
for a:=0 to World[nrob].Mesh.GetNumVertices-1 do
begin
Single(Pointer(Integer(p)+versizea)^):=
Single(Pointer(Integer(p)+versize
a)^)+x;
Single(Pointer(Integer(p)+versizea+Sizeof(Single))^):=
Single(Pointer(Integer(p)+versize
a+Sizeof(Single))^)+y;
Single(Pointer(Integer(p)+versize*a+Sizeof(Single)2)^):=
Single(Pointer(Integer(p)+versize
a+Sizeof(Single)*2)^)+z;
end;
World[nrob].Mesh.UnlockVertexBuffer;
end;
[/code]

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