Autor Beitrag
point_zero
Hält's aus hier
Beiträge: 2

XP
D7
BeitragVerfasst: Do 17.11.05 14:51 
Hallo ich habe nicht allzu viel Ahnung von Pointern und ein kleines Problem:

Ich möchte über folgende Funktion

function senddaten(command:Char; Data1 : Pointer; Datasize1:Integer;
Data2 : Pointer; Datasize2:Integer;
Data3 : Pointer; Datasize3:Integer):Boolean;

Daten versenden. Da ich die Daten nicht und deren Größe vorher nicht kenne, Sie jedoch "aneinander ketten" muß, dachte ich an ein Dynamisches Array of Byte, mit dem ich dann die Daten in der Form : Data_array:=data1 + data2 + data3 verbinden kann.
ich habe schon folgenden veruch angestellt

...
COM_Data : Array of Byte;
....

if Datasize1>0 then Move(PString(Data1)^,COM_Data[0],Datasize1);
if Datasize2>0 then Move(PString(Data2)^,COM_Data[Datasize1],Datasize2);
if Datasize3>0 then Move(PString(Data3)^,COM_Data[Datasize1+Datasize2],Datasize3);

aber irgendwie klappt das Alles nicht so richtig.
Kann mir jemand den Knoten aus dem Kopf nehmen?
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 17.11.05 15:39 
So richtig versteh ich nicht wieso jemand (ich denke mal du musst eine fremde Funktion benutzen) eine konstante Anzahl von Daten(also 3) mit Hilfe von Pointern übergeben sollte :/

Hast du da vielleicht etwas fehlinterpretiert?

Falls das wirklich stimmt, würde ich es einfach so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var 
  ComData : Array of Byte;
...


procedure sendall();
begin
  setlength(Comdata,3)
  Comdata[0]:=11;
  Comdata[1]:=22;
  Comdata[3]:=33;
  if senddaten(#01; @Comdata[0]; sizeof(Comdata[0]),@Comdata[1]; sizeof(Comdata[1]),@Comdata[2]; sizeof(Comdata[2]))= true then
  begin
    form1.Label1.Caption:=inttostr(Comdata[0]);
  end
  else
  begin
  end
...
end;


Da du ja einen Pointer übergibst kennt die Funktion den Speicherbereich, in der sie die Zahl rein schreibt und kann sie direkt wärend des Aufrufs verändern.

Ansonsten:
www.marcocantu.com/E...German/ch08memde.htm
de.wikibooks.org/wik...lphi:_Pascal:_Zeiger