Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: immer noch Stress mit DLL Aufruf

  Alt 12. Jan 2005, 14:24
Moin Stefan,

was mir gerade erst auffällt:
name[c] := new(pChar); funktioniert sowieso nicht. Es muss heissen:
new(name[c]); Ich möchte lieber nicht wissen, was das Programm da beim Ablauf macht

Schau Dir noch mal genau die Doku zu New an.

Ausserdem scheint die Struktur noch einmal überarbeitungswürdig
Der Code dürfte Speicherlücken ohne Ende produzieren, selbst wenn Du das Erzeugen der Variablen umkehrst, um sie freizugeben.
Name, ip usw. sind ja nur eindimensionale Arrays (abgesehen davon, dass der Bezeichner Name unglücklich gewählt ist, da das Formular auch eine Eigenschaft dieses Namens hat), du belegst dieses aber für jeden Durchlauf von lLoop mit neuen Werten.
Am Ende kommst Du also nur noch an die Daten von [NumDevices-1] sowie alle [0] heran.
Was dazwischenliegt, kann nicht mehr freigegeben werden, da Du keinen Zugriff mehr darauf hast.

Durch die Struktur steige ich auch nicht ganz durch.
Wozu diese Schleifen:
 for c:= 0 to MAX_TCP_NM_LENGTH do name[c] := new(pChar); Du verwendest hinterher ja eh' nur das Element[0].
Dann könntest Du ja auf das Ganze verzichten, und gleich
New(nBuff[lLoop]); schreiben.

Jetzt, wo ich noch einmal einen Blick da reinwerfe:
Die Schleife könnte auch so aussehen:
Delphi-Quellcode:
for lLoop := 0 to NumDevices-1 do begin
  nBuff[lLoop] := AllocMem(MAX_TCP_NM_LENGTH+1);
  // usw.
end;
Danach ein try und im finally dann die Schleife erneut, allerdings mit FreeMem.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat