Danke für deine Antwort!
>> Das ist das relevante Codeschnippsel:
>>
>> private
>> ...
>> BufferLen : Integer; // wird mit 40 * 1024 initialisiert
>> Counter : Integer;
>> p_Rueck : PChar;
>>
>>....
>>
function GetAnswer (h:hwnd;pRD:Pchar;nMaxRDLen:Integer):Integer;
stdcall; external 'ext.dll';
Am 10.04.2020 um 18:04 schrieb Christian Schmitt:
> Am Donnerstag, 9. April 2020 09:45:24 UTC+2 schrieb Wolfgang:
>
>> In einem kleinen (~1000 Zeilen) Testprogramm funktioniert das,
>> in einem großen Projekt stürzt das Programm so heftig, dass
>> nicht einmal der try except Block greift.
>
> Bist du mit dem Debugger mal in die Zuweisungsfunktion von TStringList.Text hineingesprungen, um mal zu sehen bei welcher Anweisung genau der Crash passiert?
>
>
>> Vermute mal dass
>> die StringList Rueck nicht genug Platz hat um die ~10KB
>> aus p_Rueck auszunehmen. Wie bekomme ich die Daten auf die
>> p_Rueck zeigt in die Stringlist kopiert.
>
> Ich habe nur Delphi XE, hier ist die TStringList intern als Array aufgebaut, daher - vorausgesetzt dein Arbeitsspeicher reicht :-) - sollte das kein Problem sein.
>
Sollte vom Speicher kein Problem sein. Maximum war mal 70KB. Das ist
aber genau so viel, dass ich mit diesem funktionierenden Konstrukt mit
array of char nicht mehr arbeiten kann.
function GetAnswer(h:hwnd;var RD:Array of
Char;nMaxRDLen:Integer):Integer; stdcall; external 'ext.dll';
Rueck : Array[0..60000] of Char; // Kann halt dann nicht 70KB
errno := GetAnswer(HDL,Rueck,length(Rueck));
Ist StrPas zum kopieren von einem PChar überhaupt die richtige Funktion?
> Mir kommt noch fix folgender Gedanke: D7 ist doch noch nicht Unicode basiert, bist du sicher, dass die DLL einen Zeiger auf einen PAnsiChar zurückliefert? Nicht dass du hier Unicode zurück bekommst, dann könnte die Größenberechnung für deinen PChar falsch sein...
>
Ist sicher kein Unicode String.
DLL C : int GetAnswer(HANDLE h, LPSTR pRD, int nMaxRDLen);
> Zweiter Ansatz: StrBufSize gibt die Zeichenanzahl inklusive des Nullterminators zurück. Sicher dass es hier kein Problem gibt? Nicht dass die DLL den Nullterminator überschreibt (geht das überhaupt?) und die .Text-Funktion dann quasi das Ende nicht findet...?
>
> Was enthält dein PChar denn, hast du da mal reingeschaut?
Die DLL sollte eigentlich einen Nullterminierten String zurückliefern.
Sieht vom Debugger aus soweit gut aus aber werde da nochmal genauer
wegen des #0 reinschauen.
> Alles gerade nur so kurze Gedanken...
>
> Happy Easter!
>
> Gruß
>
lg Wolfgang