Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   exe läuft gar nicht nach Portierung auf RAD2009 (https://www.delphipraxis.net/136743-exe-laeuft-gar-nicht-nach-portierung-auf-rad2009.html)

messie 7. Jul 2009 09:14


exe läuft gar nicht nach Portierung auf RAD2009
 
Moin,

ich habe ein Programm (erstellt in D6) überarbeitet und möchte es nun mal probieren (erstellt in RAD2009). Der Effekt: es läuft gar nicht erst an. Im OnlineDebugger bekomme ich die Meldung "access violation at 0x00 read of address 0x00". Mehr geht nicht, komme nicht mal in den Bereich Initialization etc. Das CPU-Fenster zeigt ab Adresse 0x00 keine Anweisungen, nur ????.
Da das Programm sich auf dem Kundenrechner mit D6 wunderbar compilieren und benutzen lässt, denke ich an irgendwelche Linker-Einstellungen, die ich noch nicht kenne. Gibt es einen 64bit-Linker im Pro-Paket?
Ansonsten sind viele Hardwarezugriffe im Programm (Prüfstand).

BTW: ich habe die Suche jetzt nicht bemüht, weil die GPRS-Verbindung hier total lahm ist.

Grüße, Messie

mkinzler 7. Jul 2009 09:16

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Adresse 0 weist auf eine nicht instantiertes Objekt hin ( 0 = Nil)

messie 7. Jul 2009 09:33

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Zitat:

Zitat von mkinzler
Adresse 0 weist auf eine nicht instantiertes Objekt hin ( 0 = Nil)

Ja, aber wo? Ich bin ja noch nicht mal bei der Intitalisierung.
Das Ereignisprotokoll liefert als letzten Eintrag
Zitat:

Modul laden: OLEPro32
Grüße, Messie

mkinzler 7. Jul 2009 09:40

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Ohne den Source zu kennen, kann man da schlecht helfen

Klaus01 7. Jul 2009 09:45

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
.. jetzt kommt ein wilde Vermutung:

Kann es sein, das Du die DLL olePro32.dll einbinden willst,
und irgendwas mit Strings machst?
Strings D6 <> String D2009

Wie gesagt nur eine Vermutung.

Grüße
Klaus

himitsu 7. Jul 2009 09:48

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
ich glaub OLE und Delphi-Strings verstragen sich eh nicht, also würde ich da eher nicht vermuten, abgesehn das String (AnsiString und UnicodeString) in Delphi bei "nil" sich gleich verhält.

mkinzler 7. Jul 2009 09:49

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Bei OLE würde sicher eher WideString anbieten

messie 7. Jul 2009 10:18

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Zitat:

Zitat von mkinzler
Ohne den Source zu kennen, kann man da schlecht helfen

Ob das wirklich hilft?
Delphi-Quellcode:
program ShiftNow;


uses
  Forms,
  Windows,
  FMain in 'FMain.pas' {Main},
  UHWConfig in 'UHWConfig.pas',
  FAdvantech in 'FAdvantech.pas' {Advantech},
  UIO_AI_1715 in 'UIO_AI_1715.pas',
  UResourceString in 'UResourceString.pas',
  UIO_AO_1727 in 'UIO_AO_1727.pas',
  UIO_DIO_1730 in 'UIO_DIO_1730.pas',
  UMot_APCI8001 in 'UMot_APCI8001.pas',
  UIO_Thread in 'UIO_Thread.pas',
  UIO_ADAM in 'UIO_ADAM.pas',
  FHelp in 'FHelp.pas' {Help},
  FMessung in 'FMessung.pas' {Messung},
  FManuell in 'FManuell.pas' {Manuell},
  UBahnThread in 'UBahnThread.pas',
  mcug3 in 'mcug3.pas',
  UIniFile in 'UIniFile.pas',
  UGlobalClass in 'UGlobalClass.pas',
  FEingabe in 'FEingabe.pas' {Eingabe: TTntForm},
  FFahrSeg in 'FFahrSeg.pas' {FahrSegForm},
  FSplash in 'FSplash.pas' {Splash},
  UUtils in 'UUtils.pas',
  FFahrProg in 'FFahrProg.pas' {FahrProgForm},
  UStatus in 'UStatus.pas',
  UIO_Terminal in 'UIO_Terminal.pas',
  FInfo in 'FInfo.pas' {Info},
  UIO_NI_USB_6229 in 'UIO_NI_USB_6229.pas';

{$R *.res}

var
  ProgHandle : THandle;

begin //hier komme ich noch hin
  ProgHandle := CreateMutex(nil, True, 'ShiftNow'); //hier komme ich nicht an
  if GetLastError <> ERROR_ALREADY_EXISTS then
  begin
    Application.Initialize;
    Application.CreateForm(TMain, Main);
    Application.CreateForm(TFahrProgForm, FahrProgForm);
    Application.CreateForm(TInfo, Info);
    Splash.InitializationDone := true;
    Application.CreateForm(TAdvantech, Advantech);
    Application.CreateForm(THelp, Help);
    Application.CreateForm(TMessung, Messung);
    Application.CreateForm(TManuell, Manuell);
    Application.CreateForm(TEingabe, Eingabe);
    Application.Run;
  end;
  CloseHandle(ProgHandle);
end.
Ich komme nicht mal bis zum Erstellen des Mutex (da hätte ich jetzt Klaus' Vermutung unterstützt). Die OLE-Links habe ich rausgeworfen, weil die sowieso nicht gebraucht wurden.
Wie passiert denn noch alles beim Programmstart? Alles was Objekt ist, dürfte ja noch keine Rolle spielen, oder?

Grüße, Messie

P.S. die Ide hat dann gleich ein paar Bugs offenbart, wie z.B. dass Ctrl+f im CPU-Fenster eine Exception in der IDE auslöst. Wo meldet man das hin?

Muetze1 7. Jul 2009 11:09

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Schau dir den Initialization Abschnitt deiner Units an.

messie 7. Jul 2009 12:12

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Zitat:

Zitat von Muetze1
Schau dir den Initialization Abschnitt deiner Units an.

Den habe ich nur im Hauptformular FMain und da komme ich gar nicht an. Also Application.Initialize würde die ja alle abarbeiten. Es muss vorher etwas Gravierendes passieren.
Deshalb interessiert mich, was sonst noch so beim Start eines Programms passiert. Eine fehlende dll wurde vorher schon angemeckert.

Grüße, Messie

himitsu 7. Jul 2009 12:21

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Alles was zwischen Begin-End. am Ende eines Projektes bzw. den Units steht und alles im Initialization-Abschnitt wird bei Programmstart erstmal ausgeführt ... also erstmal nachsehn was in den anderen Units da noch drinsteht.

Und wenn die Units (DCU) mit passenden Debuginformationen gespeichert/erstellt sind, dann reicht auch einfach mal das Debugging mit F7 anzufangen und sich dann durchzuhangeln.

[add]
Zitat:

Also Application.Initialize würde die ja alle abarbeiten.
nein, dieser Befehl initialisiert nur das Application-Objekt ... die Unitinitialisation geschieht nocht davor (vom Debugger aus noch wärend des Begin am Ende des Projektdatei)

messie 7. Jul 2009 12:46

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Zitat:

Zitat von himitsu
Zitat:

Also Application.Initialize würde die ja alle abarbeiten.
nein, dieser Befehl initialisiert nur das Application-Objekt ... die Unitinitialisation geschieht nocht davor (vom Debugger aus noch wärend des Begin am Ende des Projektdatei)

Danke, das wusste ich noch nicht. Am Ende dieser Routine in der GnuGetText.pas hängt sich das Programm weg
Delphi-Quellcode:
function GetWindowsLanguage: string;
var
  langid: Cardinal;
  langcode: string;
  CountryName: array[0..4] of char;
  LanguageName: array[0..4] of char;
  works: boolean;
begin
  // The return value of GetLocaleInfo is compared with 3 = 2 characters and a zero
  works := 3 = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, LanguageName, SizeOf(LanguageName));
  works := works and (3 = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, CountryName,
    SizeOf(CountryName)));
  if works then begin
    // Windows 98, Me, NT4, 2000, XP and newer
    LangCode := PChar(@LanguageName[0]) + '_' + PChar(@CountryName[0]);
  end else begin
    // This part should only happen on Windows 95.
    langid := GetThreadLocale;
    case langid of
      IDBelgianDutch: langcode := 'nl_BE';
      IDBelgianFrench: langcode := 'fr_BE';
      IDBrazilianPortuguese: langcode := 'pt_BR';
      IDDanish: langcode := 'da_DK';
      IDDutch: langcode := 'nl_NL';
      IDEnglishUK: langcode := 'en_UK';
      IDEnglishUS: langcode := 'en_US';
      IDFinnish: langcode := 'fi_FI';
      IDFrench: langcode := 'fr_FR';
      IDFrenchCanadian: langcode := 'fr_CA';
      IDGerman: langcode := 'de_DE';
      IDGermanLuxembourg: langcode := 'de_LU';
      IDGreek: langcode := 'gr_GR';
      IDIcelandic: langcode := 'is_IS';
      IDItalian: langcode := 'it_IT';
      IDKorean: langcode := 'ko_KO';
      IDNorwegianBokmol: langcode := 'no_NO';
      IDNorwegianNynorsk: langcode := 'nn_NO';
      IDPolish: langcode := 'pl_PL';
      IDPortuguese: langcode := 'pt_PT';
      IDRussian: langcode := 'ru_RU';
      IDSpanish, IDSpanishModernSort: langcode := 'es_ES';
      IDSwedish: langcode := 'sv_SE';
      IDSwedishFinland: langcode := 'fi_SE';
    else
      langcode := 'C';
    end;
  end;
  Result := langcode;
end;
Scheint daran zu liegen, dass GetLocaleInfo mit dem array of char nix anfangen kann.

Grüße, Messie

Klaus01 7. Jul 2009 12:49

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
In Delphi 2009 besteht ein Char aus 2 Byte (UniCode)
Wenn Du ein 1 Byte Char haben willst solltest Du AnsiChar verwenden.

Grüße
Klaus

himitsu 7. Jul 2009 12:57

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Eigentlich sollte die Definition von MSDN-Library durchsuchenGetLocaleInfo in Delphi auch Unicode sein und auf GetLocaleInfoW verweisen.

Apollonius 7. Jul 2009 13:11

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Und genau dort liegt der Hase im Pfeffer: Du musst für den letzten Parameter Length, nicht SizeOf verwenden - mit dem derzeitigen Code "denkt" GetLocalInfo, dass der Puffer doppelt so groß ist und zerschießt dir die Rücksprungadresse.

himitsu 7. Jul 2009 13:27

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Arg, das hatte ich garnicht beachtet ...
also Length(LanguageName) verwenden oder alles (String, Char und Funktionen) auf Ansi umstellen

Apollonius 7. Jul 2009 13:36

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Letzteres wäre allerdings wohl kaum Sinn der Unicode-Übung. Es spricht ja nichts dagegen, die Funktion korrekt zu benutzen, indem man sich bei den Parametern nach der Dokumentation richtet. 8)

Bbommel 7. Jul 2009 13:44

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
Zitat:

Zitat von messie
Am Ende dieser Routine in der GnuGetText.pas hängt sich das Programm weg

Hallo Messie,

wenn du alle Units erst mal so übernommen hast, wird das wohl tatsächlich die Ursache sein. Um mit D2009 arbeiten zu können, brauchst du dringend ein Update der gnugettext.pas. Um deine GPRS-Verbindung zu schonen, zum Runterladen bitte einfach hier entlang.

Bis denn
Bbommel

messie 7. Jul 2009 18:00

Re: exe läuft gar nicht nach Portierung auf RAD2009
 
So, bin wieder im gelobten DSL-Land. Statt nur die neue GnuGetText einzubinden habe ich dann auch gleich die neueste CPort-Kompo ausprobiert, die brauchte das nämlich.

Muss noch am Gerät ausprobiert werden aber erst nach dem Urlaub.

Danke nochmal für die Tipps

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 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