Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Umstellung von Delphi 7 auf 2010 (https://www.delphipraxis.net/155596-umstellung-von-delphi-7-auf-2010-a.html)

menten 30. Okt 2010 22:06

Delphi-Version: 2010

Umstellung von Delphi 7 auf 2010
 
Hallo zusammen,

ich bin gerade dabei, eine mit Delphi 7 entwickelte Anwendung auf Delphi 2010 umzustellen. Das hat auch soweit funktioniert, nur bekomme ich beim Beenden der Anwendung Zugriffsverletzungen an verschiedenen Stellen. Mir kommt es so vor, als wäre die Reihenfolge, in der die Objekte zerstört werden, durcheinander gekommen. Der gleiche Quellcode funktioniert unter Delphi 7 reibungslos.

Hat jemand eine Idee, was das sein könnte?


Danke für jede Hilfe.
Stefan Menten

zeras 31. Okt 2010 13:52

AW: Umstellung von Delphi 7 auf 2010
 
Ich hatte einmal Probleme bei Umstellung von D6 auf D2006. Dort fehlte im Projektfile irgendetwas. Aber genau weiß ich das nicht mehr. Kannst ja mal im Projektfile nachschauen, ob es so aussieht:

Delphi-Quellcode:
  Application.Initialize;

  .................
  Application.Run;
Meines Wissens fehlte da irgwendwie der Initialize Zweig. Vielleicht hilft das.

MuTzE.Y85 31. Okt 2010 14:06

AW: Umstellung von Delphi 7 auf 2010
 
Wäre sehr hilfreich, wenn du die Stellen mal posten würdest. Oder zumindest ein paar.

ak-ac 31. Okt 2010 14:55

AW: Umstellung von Delphi 7 auf 2010
 
Bei D2009 kamen einige Unicode-Besonderheiten dazu und Records haben sich in der Größe geändert. Hast du mal in der Hilfe die Hinweise zur Umstellung angeschaut? Das würde erklären, warums im Speicher nicht so rund läuft...

menten 31. Okt 2010 17:34

AW: Umstellung von Delphi 7 auf 2010
 
Hallo zusammen,

danke für die Antworten. Hier erst mal der Quelltext des Projektes:

<--
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TDM_AM, DM_AM);
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.
-->

Die erste Form ist ein Datenmodul, die zweite das Hauptfenster.

Unter Delphi 2010 ist es nun so, das die beiden Formen nicht in der umgekehrten Reihenfolge zerstört werden, also zuerst frmMain, dann das Datenmodul, sondern zuerst das Datenmodul (oder auch parallel). Wenn ich dann in der Hauptform z.B. auf eine ADO-Verbindung auf dem Datenmodul zugreifen will, existiert das Objekt nicht mehr. Es ist aber auch nicht nil.

<--
Delphi-Quellcode:
  qyLogged := TADOQuery.Create(nil);

  qyLogged.Connection := DM_AM.ADOConnection;

  qyLogged.SQL.Text := 'Select * from xyz' // peng
-->

Das führt dann zu den Fehlern.


Gruß
Stefan

messie 1. Nov 2010 07:46

AW: Umstellung von Delphi 7 auf 2010
 
Ich habe bei der Umstellung auch öfter mal Späne gehabt. Um die nicht sehr übersichtliche Unicode-Implementation auszuschließen, könnte ein cast in einen AnsiString als Prüfung dienen:
Zitat:

AnsiString('Select * from xyz')
Wenn das funktioniert, liegt es am Unicode.

Grüße, Messie

menten 1. Nov 2010 09:23

AW: Umstellung von Delphi 7 auf 2010
 
Hallo zusammen,

ich bin einen Schritt weiter.

<--
Delphi-Quellcode:
function SMMessageDlg(const sText, cText: AnsiString; aType: Cardinal): Word;
var
   pText, pCaption: PWideChar;
begin

  try
    GetMem(pText, Length(sText)+1);
    GetMem(pCaption, Length(cText)+1);
    StrPCopy(pText, sText);
    StrPCopy(pCaption, cText);

    result := MessageBox(0, pText, pCaption, aType);

  finally
    FreeMem(pText, Length(sText)+1);
    FreeMem(pCaption, Length(cText)+1);
  end;
end;
-->

Diese Funktion habe ich mir vor Jahren mal geschrieben um das Problem zu umgehen, dass die Standard-Dialoge von Delphi die Benutzeroberfläche von XP und Nachfolgern nicht unterstützte und die Buttons dann aussahen wie unter W9x.

Ich habe die Funktion zwar angepasst (PWideChar und AnsiString), aber offensichtlich kommt der Fehler immer noch dadurch zustande. Kurrioserweise funktioniert die Funktion, die Fehler kommen erst hinterher.

Any Idea?

Gruß
Stefan

DeddyH 1. Nov 2010 09:28

AW: Umstellung von Delphi 7 auf 2010
 
Ginge das nicht auch kurz und bündig?
Delphi-Quellcode:
function SMMessageDlg(const sText, cText: AnsiString; aType: Cardinal): Word;
begin
  Result := MessageBoxA(0, PAnsiChar(pText), PAnsiChar(pCaption), aType);
end;

messie 1. Nov 2010 09:29

AW: Umstellung von Delphi 7 auf 2010
 
Delphi-Quellcode:
GetMem(pText, Length(sText)+1);
GetMem(pCaption, Length(cText)+
Du holst Dir da Speicher für PWideChar von einem AnsiString. Du brauchst aber 2 Byte pro Zeichen.

Grüße, Messie

Bummi 1. Nov 2010 09:31

AW: Umstellung von Delphi 7 auf 2010
 
@menten
PWideChar passt aber nicht zu AnsiString.....
ansonsten schliesse ich mich DeddyH an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.
Seite 1 von 2  1 2      

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