Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

AW: Neue IDE, alter Quellcode, Access Violation

  Alt 23. Dez 2020, 03:18
ShortString und die LongStrings (AnsiString, String/UnicodeString und AnsiString-Ableitungen ala UTF8String oder RawByteString) sind Delphi-Typen.
Auch wenn es da für C++, C# und andere Sprachen kompatible Implementierungen gibt, fehlt dennoch meistens noch der Zugriff auf den Speichmanager vom Delphi, in welchem die Delphi-Strings verwaltet werden.

WideString ist eine Kapelung der WinAPIs für den BSTR der OleAut32.dll (siehe MSDN-Library durchsuchenSysAllocStringLen/SysReAllocStringLen/SysFreeString/SysStringLen), drum lässt der sich problemlos an Alles übergeben, was die Win32-API (32/64 Bit) unterstützt.

ShortString ist aber ein Record, und der lässt sich in anderen Sprachen auch nachbauen (ein LängenByte, gefolgt von bis zu 255 AnsiChar)
PS: Darum fangen im Delphi die Strings auch standardmäßig mit 1 an.

ByteBool, WordBool und LongBool sind auch Typen, welche z.B. ebenfalls C++ kennt (LongBool=BOOL).
https://docs.microsoft.com/en-us/win...ows-data-types

Ja, so lange man nur lesend auf einen String zugreift, wird im Speichermanager nichts geändert.
Speicher auf einer Seite erstellen und über eine Free-Prozedur auf der selben Seite wieder freigeben, ist kein Problem,
aber z.B. sich eine Kopie zu machen (in einer Variable speichern) und später nochmal drauf zuzugreifen, ergibt gern massig Probleme,
also sicherheitshalber "String" garnicht erst übergeben, damit das potentielle Risiko garnicht erst vorhanden ist.
(ohne Packages oder ShareMem sind es ja zwei Speichermanager und der Eine kann mit dem Speicher des Anderen nichts anfangen = Exception)


Zitat:
Aber für mich reichte erst einmal auch die Antwort, dass ich es am besten mit der 2010er noch einmal probieren sollte.
Ohne Packages und möglichst ohne Übergabe von Typen/Speicher in eine "abgetrennte" EXE/DLL sollte es mit einem neuen Delphi auch gehn.

Aber wenn es schon in D2010 Probleme gibt, dann weißt du zumindestens, dass es vorviegend andere Fehler sind (kaputter Code), die mit dem Delphi nichts zu tun haben.


Debuggen:

Im Menü "Start > Parameter" kannst zu deiner DLL die EXE angeben, welche für die Ausfühung benutzt werden soll.
Ebenso über das Menü "Start > Prozess laden".
Hier startet Delphi dann statt der DLL (was ja nicht geht) die EXE, hängt sich an den erstellten Prozess und in dessen Speicher wird dann deine DLL gedebuggt.

Oder über das Menü "Start > Mit Prozess verbinden", da kannst du die EXE vorher selbst starten und dich dann anschließend mit dem Debugger dranhängen.
Was hier nun gedebuggt wird, hängt von den einkompilierten oder danebengelegten Debuginfos ab (in EXE und DLL) und davon welche Quellcodes (Projekte/Units) in der IDE geladen sind.


Es gibt oftmals auch ältere Versionen zu kaufen. (eBay und so)
* Achtung, bei Upgrade-Lizenzen solltest du auch die vorhergehende Lizenz mit kaufen, denn das Upgrade ist ohne einen Vorgänger nicht gültig/legal.
* Und nach dem Kauf kommen nochmal paar Euro drauf, für das Überschreiben der Lizenz auf deinen EDN-Account (20-50€ ... weiß grad nicht wie teuer aktuell)
* Und da die gebrauchten Lizenzen oftmals nicht sehr viel billiger werden ... da kann man sich vermutlich auch direkt eine aktuelle Prof kaufen (ein/zwei Mal jedes Jahr gibt/gab es Sonderaktionen mit paar Prozent Rabatt, bis 30%)
https://www.embarcadero.com/de/produ...vious-versions
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Dez 2020 um 03:49 Uhr)
  Mit Zitat antworten Zitat