AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Migration Delphi 7 nach XE

Ein Thema von menten · begonnen am 11. Okt 2011 · letzter Beitrag vom 14. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
menten

Registriert seit: 3. Apr 2009
41 Beiträge
 
Delphi 10.3 Rio
 
#1

Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 13:49
Delphi-Version: XE
Hallo zusammen,
ich brauch mal eure Hilfe. Bin gerade dabei ein Delphi 7 Projekt nach Delphi XE zu migrieren. Eigentlich hatte ich nicht mit großen Problemen gerechnet da ich alle Komponenten in aktuellen Versionen installiert habe (LMD, DevExpress, ICS usw.). Problem sind offensichtlich zwei DLLs die dynamisch geladen werden. Die Schnittstelle ist mit PCHAR gemacht. Grundsätzlich läßt sich alles kompilieren, Problem sind immer wieder auftretende Speicherschutzverletzungen. Die treten aber nicht immer gleich auf, sondern einmal kann ich ein Fenster in der DLL aufrufen, beim zweiten Mal bekomme ich einen Fehler wenn ich für ein Grid in dem Fenster EndUpdate aufrufe. Ein Fenster aus einer DLL kann ich aufrufen, das zweite erzeugt einen Fehler beim Create selbst dann wenn ich ein leeres Fenster erzeuge, usw. usf.

Habe ich hier etwas grundlegendes übersehen? Sollte ich zuerst mal von Delphi 7 nach 2007 migrieren? Ich bin ratlos.

Danke für jede Hilfe!
Stefan Menten
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 13:52
Hast du denn in der Schnittstelle auch PChar durch PAnsiChar ersetzt? Denn die arbeitet ja offensichtlich mit PAnsiChar, wenn es unter Delphi 7 mit PChar (=PAnsiChar für Delphi 7) ging.

Eine DLL-Schnittstelle mit PChar zu deklarieren, ist aber ohnehin schon immer ein Programmierfehler gewesen...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#3

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 13:53
Die Schnittstelle ist mit PCHAR gemacht.
D.h., Du übergibst den Datentyp PChar als Parameter? Versuch es in dem Fall doch einmal explizit mit PAnsiChar. Ansonsten wäre etwas Code hilfreich.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
menten

Registriert seit: 3. Apr 2009
41 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 14:00
Die betroffenen DLLs habe ich auf PChar gelassen weil ja auch die DLLs nach XE migriert werden. Bei einer anderen DLL die auf D7 bleibt habe ich die Schnittstelle auf PAnsiChar umgestellt und das funktioniert auch. Muss ich die Schnittstelle grundsätzlich auf PAnsiChar umstellen?


Gruß und danke
Stefan Menten
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#5

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 14:07
Es kommt jetzt darauf an. Das Problem ist, dass bis einschließlich Delphi 2007 galt: PChar = PAnsiChar. Mit Delphi 2009 hat sich das geändert: PChar = PWideChar. So, für Dich bedeutet das, dass Du PChar nur dann so belassen kannst, wenn sowohl Programm als auch DLL mit derselben Delphi-Version kompiliert wurden. Oder aber Du implementierst die DLL-Funktionen jeweils doppelt, einmal in einer Ansi- und einmal in einer Unicode-Version.
Delphi-Quellcode:
function SomeDLLFuncA(Data: PAnsiChar); stdcall;
function SomeDLLFuncW(Data: PWideChar); stdcall;
Im Programmcode musst Du dann festlegen, welche Version aufgerufen werden soll.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
menten

Registriert seit: 3. Apr 2009
41 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 14:44
DLL und Programm werden mit der gleichen Version kompiliert, gehört alles zu einem Projekt. Die exportierten Funktionen sind aber nicht als stdcall definiert. Kann es damit oder mit dem dynamischen Laden zusammenhängen?

Gruß und danke
Stefan Menten
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 14:49
Nein nein, das stdcall hatte ich nur aus Gewohnheit getippt. Wenn Du beide Teile mit derselben Delphi-Version kompilierst, dann sollte der PChar-Datentyp ja kompatibel sein, somit kein Problem. Nur, wenn Du eine "alte" Dll laden willst, bekommst Du u.U. Schrott.

[edit] Achja, allerdings darfst Du auch keinen Code haben, der davon ausgeht, dass Char = 1 Byte, wenn z.B. irgendwo eine Größe in Bytes benötigt wird. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
menten

Registriert seit: 3. Apr 2009
41 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 15:44
Ich greife eigentlich nirgendwo auf Char direkt zu. Ich halte mich auch wo immer es geht an Delphi-Standards.

Was mich irritiert ist, dass eine Funktion einmal funktioniert und dann nicht mehr. Oder aber beim Start des Programmes nicht funktioniert, dann aber bei einem Ausruf aus dem laufenden Programm. Und das der Speicherfehler irgendwo auftritt. Kann das auch eine Kompiliereinstellung sein?

Gruß und danke
Stefan Menten
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#9

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 15:49
Dazu kann man wohl ohne Code keine verlässliche Aussage treffen. DLL und Programm sind nun aber kompatibel, und es wird garantiert die richtige DLL geladen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Migration Delphi 7 nach XE

  Alt 11. Okt 2011, 18:07
Die Symptome sprechen dafür, dass du irgendwo Speicher überschreibst. Eben zum Beispiel durch ein Problem PWideChar <--> PAnsiChar. Bei einer DLL-Schnittstelle solltest du jedenfalls immer explizit PWideChar oder PAnsiChar benutzen und nie PChar. Sonst gibt es nur Probleme, weil nicht klar ist was gemeint ist, wenn jemand anderes die Schnittstelle bekommt.

Gibt es irgendwelche Compilerwarnungen?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz