Hallo,<br>
<br>
meine Problem ist diese records zu füllen<br>
besonders den Zeiger von "NEXT"<br>
wenn der "Caller" den Speicher 'Allociert'.<br>
Diese sind so änhlich wie von der<br>
IPHelperApi wo Windows die Record dieser<br>
Art füllt.<br>
<br>
code:<br>
<PRE>
PADDRESS_INFO = ^TADDRESS_INFO;
TADDRESS_INFO = record
Next: PADDRESS_INFO;
Address: array [0..99] of Char;
end;
PUSER_INFO = ^TUSER_INFO;
TUSER_INFO = record
Next: PUSER_INFO;
KundenNr: DWord;
Name: array [0..39] of Char;
Key: array [0..7] of Char;
FromAddressList: TADDRESS;
ToAddressList: TADDRESS;
end;
function QueryKundenEx(p: PUSER;var OutBufLen: Cardinal): DWORD; stdcall;
var ic: Integer;
begin
if P = nil then
begin
OutBufLen = 10 * SizeOf(TUser);
//10 User sind vorhanden der Call muss p
//initialieseren mit
//GetMem(p,OutBufLen);
//FillChar(p^,OutBufLen,#0;
//und die function erneutaufrufen...
Result := 0;
end else
begin
for ic:=0 to 9 do
begin
p^.KundenNr := i;
StrPCopy(p^.Name,'Kunde '+IntToStr(ic));
StrPCopy(p^.Key,'Key'+IntToStr(ic));
if ic <> 9 then
begin
P^.Next := p;
Inc(p^.Next); //ist das so richtig?
P := P^.Next;
end
//hier das füllen von FromAddressList
//und ToAddressList
//aber wie ist das hier mit dem
//Speicher von next (der erste ist ja
//int) ist der schon 'Allociert'
//oder muss das die function
end;
end;
end;
</PRE>
<br>
M.f.G. H.Leesch
<br>
meine Problem ist diese records zu füllen<br>
besonders den Zeiger von "NEXT"<br>
wenn der "Caller" den Speicher 'Allociert'.<br>
Diese sind so änhlich wie von der<br>
IPHelperApi wo Windows die Record dieser<br>
Art füllt.<br>
<br>
code:<br>
<PRE>
PADDRESS_INFO = ^TADDRESS_INFO;
TADDRESS_INFO = record
Next: PADDRESS_INFO;
Address: array [0..99] of Char;
end;
PUSER_INFO = ^TUSER_INFO;
TUSER_INFO = record
Next: PUSER_INFO;
KundenNr: DWord;
Name: array [0..39] of Char;
Key: array [0..7] of Char;
FromAddressList: TADDRESS;
ToAddressList: TADDRESS;
end;
function QueryKundenEx(p: PUSER;var OutBufLen: Cardinal): DWORD; stdcall;
var ic: Integer;
begin
if P = nil then
begin
OutBufLen = 10 * SizeOf(TUser);
//10 User sind vorhanden der Call muss p
//initialieseren mit
//GetMem(p,OutBufLen);
//FillChar(p^,OutBufLen,#0;
//und die function erneutaufrufen...
Result := 0;
end else
begin
for ic:=0 to 9 do
begin
p^.KundenNr := i;
StrPCopy(p^.Name,'Kunde '+IntToStr(ic));
StrPCopy(p^.Key,'Key'+IntToStr(ic));
if ic <> 9 then
begin
P^.Next := p;
Inc(p^.Next); //ist das so richtig?
P := P^.Next;
end
//hier das füllen von FromAddressList
//und ToAddressList
//aber wie ist das hier mit dem
//Speicher von next (der erste ist ja
//int) ist der schon 'Allociert'
//oder muss das die function
end;
end;
end;
</PRE>
<br>
M.f.G. H.Leesch
Comment