Einzelnen Beitrag anzeigen

stalkingwolf

Registriert seit: 6. Mai 2011
540 Beiträge
 
#7

AW: DLL XE4 in Delphi 6 ohne sharemem

  Alt 9. Apr 2020, 08:38
[QUOTE=Blup;1461590]
Bei WideString wird der Speicher von Windows verwaltet. Das ist langsamer, aber das fällt in der Regel kaum ins Gewicht.
Bei WideString bekomme ich eine Zugriffsverletzung, sobald ich die DLL Funktion aufrufe.
Selbstverständlich müssen dann beide Seiten die Funktionen bzw. Parameter und Rückgabewerte mit WideString delarieren und verwenden (DLL und Anwendung).
Das ist klar. Kracht dennoch.

Ich hab auch schmerzlich feststellen müssen, das scheinbar die Länge von Records begrenzt ist ... wir hatten hier so ein Monster von 150 shortstrings. Der kam nicht ganz auf der anderen Seite an
Wer macht den so was? Wenn es sich um konstante Strings handelt, kann man diese als Resoutce in der DLL anlegen.
Die Anwendung soll gezielt den String aus der DLL laden, der gerade benötigt wird.
Allternativ eine CallBack-Funktion als Parameter übergeben, die dem gerade benötigten String bei Bedarf bereitstellt.
Der Grund ist das dieser riesige Record damals wegen unser BPL erstellt wurde. Es werden alle nötigen Daten hineingepackt und dann der Record an die BPL übergeben, da diese nicht auf Datenbank zugreifen kann. und so wurde das Ding immer größer und größer und war dann irgendwann dieses Monster.
Klar man hat es sich zu einfach gemacht.

Ich bin mir aber ganz sicher dass es nicht am Record selbst lag, denn eine Grenze gibt es nicht.
Record als CONST-Parameter (oder VAR) wird nur als Referenz übergeben, also garnichts kopiert.
Doch es kam nur ca 1/3 an. Nichts verschoben oder ähnliches. Wie gesagt für unsere BPL funktioniert das.
Ich habe den Record zerlegt mit exakt den gleichen Typen und dann kommt auf der anderen Seite alles an, wenn ich jeden Rekord einzeln übergebe.


Mittlerweile funktioniert alles so wie ich es will.
  Mit Zitat antworten Zitat