AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadResStri
Thema durchsuchen
Ansicht
Themen-Optionen

Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadResStri

Ein Thema von bernau · begonnen am 20. Jun 2024 · letzter Beitrag vom 21. Jun 2024
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#1

Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadResStri

  Alt 20. Jun 2024, 09:23
Delphi-Version: 12 Athens
Ich bin von Delphi 11 auf Delphi 12 umgestiegen. Eigentlich alles gut. Nun habe ich festgestellt, dass ein Programm nicht mehr startet.

Breakpoint auf die erste Zeile im Projekt-Quelltext gesetzt. Dort kommt das Programm erst gar nicht an.

Also mit F7 gestartet und festgestellt, dass beim initialisieren der Units der Fehler auftritt.

In der Procedure InitUnits (Zeile 242003) aus der Unit System werden die einzelnen Units initialisiert.

Delphi-Quellcode:
// Unit System

procedure InitUnits;
var
  Count, I: Integer;
  Table: PUnitEntryTable;
  P: Pointer;
begin
{$IF defined(EXTERNALLINKER)}
  dbk_RTL_initialized := 0;
{$ENDIF}
  if InitContext.InitTable = nil then
    exit;
  Count := InitContext.InitTable^.UnitCount;
  I := 0;
  Table := InitContext.InitTable^.UnitInfo;
{$IF defined(LINUX) and not defined(EXTERNALLINKER)}
  Inc(PByte(Table), InitContext.Module^.GOT);
{$ENDIF}
  try
    while I < Count do
    begin
      P := Table^[I].Init;
      Inc(I);
      InitContext.InitCount := I;
      if Assigned(P) and Assigned(Pointer(P^)) then
      begin
{$IF defined(MSWINDOWS)}



        TProc(P)(); // <----- Hier wird zum Initialisieren in die jeweilige Unit gesprungen.



{$ELSEIF (defined(POSIX) and defined(CPUX86)) and defined(ASSEMBLER)}
        CallProc(P, InitContext.Module^.GOT);
{$ELSE}
        TProc(P)();
{$ENDIF}
      end;
    end;
  except
    FinalizeUnits;
    raise;
  end;
{$IF defined(EXTERNALLINKER)}
  dbk_RTL_initialized := 1;
{$ENDIF}
end;
Bei der Unit "Soap.XSBuiltIns" lande ich sofort in der letzten QuellcodeZeile

Delphi-Quellcode:

// Letzte Zeilen der Unit Soap.XSBuiltIns

procedure InitXSTypes;
begin
  RemClassRegistry.RegisterXSClass(TXSDateTime, XMLSchemaNameSpace, 'dateTime', '',True);
  RemClassRegistry.RegisterXSClass(TXSTimeInstant, XMLSchemaNameSpace, 'timeInstant', '', True);
  RemClassRegistry.RegisterXSClass(TXSTime, XMLSchemaNameSpace, 'time', '', True);
  RemClassRegistry.RegisterXSClass(TXSDate, XMLSchemaNameSpace, 'date', '', True);
  RemClassRegistry.RegisterXSClass(TXSDuration, XMLSchemaNameSpace, 'duration', '', True);
  RemClassRegistry.RegisterXSClass(TXSDuration, XMLSchemaNameSpace, 'timeDuration', '', True);
  RemClassRegistry.RegisterXSClass(TXSHexBinary, XMLSchemaNamespace, 'hexBinary', '', True);
  RemClassRegistry.RegisterXSClass(TXSDecimal, XMLSchemaNamespace, 'decimal', '', True);
  {
  RemClassRegistry.RegisterXSClass(TXSDecimal, XMLSchemaNamespace, 'integer', '', True);
  }

  RemClassRegistry.RegisterXSClass(TXSString, XMLSchemaNamespace, 'string', '', True);
  RemClassRegistry.RegisterXSClass(TXSBoolean, XMLSchemaNamespace, 'boolean', '', True);
  RemClassRegistry.RegisterXSClass(TXSInteger, XMLSchemaNamespace, 'int', '', True);
  RemClassRegistry.RegisterXSClass(TXSLong, XMLSchemaNamespace, 'long', '', True);

  RemClassRegistry.RegisterXSClass(TXSDecimal, XMLSchemaNamespace, 'negativeInteger', '', True);
  RemClassRegistry.RegisterXSClass(TXSDecimal, XMLSchemaNamespace, 'nonNegativeInteger', '', True);
  RemClassRegistry.RegisterXSClass(TXSDecimal, XMLSchemaNamespace, 'nonPositiveInteger', '', True);
  RemClassRegistry.RegisterXSClass(TXSDecimal, XMLSchemaNamespace, 'positiveInteger', '', True);
end;

end. // <---- Von TProc(P)(); landet der Debugger hier
Dann geht es weiter mit F7 in die Procedure _InitResStringImports

Delphi-Quellcode:
procedure _InitResStringImports(InitTable: Pointer);

//...
//...
//...

@@ustring:
        CALL LoadResStringU

Dort geht es weiter mit F7 in die Procedure LoadResStringU

Delphi-Quellcode:
function LoadResStringU(ResStringRec: PResStringRec): UnicodeString;
begin
  Result := UnicodeString(LoadResString(ResStringRec));
end;
Und zum Schluss geht es weiter mit F7 in die Procedure LoadResString

Delphi-Quellcode:
function LoadResString(ResStringRec: PResStringRec): string;
var
  Buffer: array [0..4095] of Char;
begin // <--- Hier landet der Debugger. Mit F8 erscheint sofort die Exception
  if ResStringRec = nil then Exit;
  if Assigned(LoadResStringFunc) then
    Exit(LoadResStringFunc(ResStringRec));
  if ResStringRec.Identifier < 64*1024 then
    SetString(Result, Buffer,
      LoadString(FindResourceHInstance(ResStringRec.Module^),
        ResStringRec.Identifier, Buffer, Length(Buffer)))
  else
    Result := PChar(ResStringRec.Identifier);
end;
Dann erscheint sofort die Exception

Code:
Im Projekt comcept3.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0xce93d58d: access of address 0xce93d58d' aufgetreten.
Ab hier stehe ich auf dem Schlauch.

Hat jemand eine Idee, wo ich weiter suchen kann?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.596 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 10:14
Da hilft wohl nur die CPU-Ansicht weiter. Dann kannst Du hoffentlich herausfinden, bei welchem Zugriff die AV auftritt. Es scheint irgendwas im Initialisierungs-Code der Procedure zu sein.
Thomas Mueller
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
346 Beiträge
 
#3

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 10:44
Hi,
Hat jemand eine Idee, wo ich weiter suchen kann?
Look in every "initialization" section being called before this one, most likely the exact unit before "Soap.XSBuiltIns", this one is innocent and the error somewhere earlier.

What did happen ?
Either : (these what came to mind, may be there is more)
1) a unit in initialization section directly had corrupted the stack, aka overwrite it,
2) a unit in initialization section performed an operation that pushed/fooled the memory manager to corrupt a global variable or singleton class, that lead to corrupted stack,
3) a unit in initialization section corrupted the stack by using the wrong calling convention.

Example : loading a library (DLL) with broken declaration (wrong call convention, like missing stdcall where it is needed or using it when it is not needed) could lead to this.

In all cases the error root is in the initialization section of one unit being initialized before "Soap.XSBuiltIns".
Kas
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#4

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 11:20
Da hilft wohl nur die CPU-Ansicht weiter. Dann kannst Du hoffentlich herausfinden, bei welchem Zugriff die AV auftritt. Es scheint irgendwas im Initialisierungs-Code der Procedure zu sein.
Ich habe es befürchtet. Ist ja nicht so mein Ding.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#5

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 11:23
Hi,
Hat jemand eine Idee, wo ich weiter suchen kann?
Look in every "initialization" section being called before this one, most likely the exact unit before "Soap.XSBuiltIns", this one is innocent and the error somewhere earlier.

What did happen ?
Either : (these what came to mind, may be there is more)
1) a unit in initialization section directly had corrupted the stack, aka overwrite it,
2) a unit in initialization section performed an operation that pushed/fooled the memory manager to corrupt a global variable or singleton class, that lead to corrupted stack,
3) a unit in initialization section corrupted the stack by using the wrong calling convention.

Example : loading a library (DLL) with broken declaration (wrong call convention, like missing stdcall where it is needed or using it when it is not needed) could lead to this.

In all cases the error root is in the initialization section of one unit being initialized before "Soap.XSBuiltIns".
The Unit called before "Soap.XSBuiltIns" is "Web.HTTPApp".

No Code in the initialization section

Delphi-Quellcode:

function TCustomWebFileDispatcher.DispatchRequest(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse): Boolean;
var
  LDispatcher: TWebBrokerDispatchFileRequest;
begin
  LDispatcher := TWebBrokerDispatchFileRequest.Create(Self,
    Request, Response);
  try
    Result := LDispatcher.DispatchFileRequest;
  finally
    LDispatcher.Free;
  end;
end;

initialization
finalization
  FreeAndNil(FContentParsers);
end.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.441 Beiträge
 
Delphi 12 Athens
 
#6

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 11:41
Anhand der Stelle mit dem Fehler würde ich auch eine defekte Resource in Betracht ziehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 13:21
Howdy,

Auch auf die Gefahr, dass ich mich unbeliebt mache. Clean und Build?

lg
Hoppy

Da hilft wohl nur die CPU-Ansicht weiter. Dann kannst Du hoffentlich herausfinden, bei welchem Zugriff die AV auftritt. Es scheint irgendwas im Initialisierungs-Code der Procedure zu sein.
Ich habe es befürchtet. Ist ja nicht so mein Ding.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#8

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 16:41
Howdy,

Auch auf die Gefahr, dass ich mich unbeliebt mache. Clean und Build?

lg
Hoppy

Da hilft wohl nur die CPU-Ansicht weiter. Dann kannst Du hoffentlich herausfinden, bei welchem Zugriff die AV auftritt. Es scheint irgendwas im Initialisierungs-Code der Procedure zu sein.
Ich habe es befürchtet. Ist ja nicht so mein Ding.

Nope
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#9

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 16:45
Anhand der Stelle mit dem Fehler würde ich auch eine defekte Resource in Betracht ziehen.
Daran habe ich auch schon gedacht. Ich verwende keine selbst erstellten Ressourcen.

Habe die Ressourcen-Dateien *.rc, *.res und *.dres gelöscht. Die werden neu Aufgebaut. Fehler immer noch da.

Gibt es noch irgendwelche Ressourcen-Dateien, die ich vielleicht übersehen haben könnte?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
346 Beiträge
 
#10

AW: Nach Update auf Delphi12 startet compiliertes Prog nicht mehr. Fehler bei LoadRes

  Alt 20. Jun 2024, 17:04
Hi,
Hat jemand eine Idee, wo ich weiter suchen kann?
Look in every "initialization" section being called before this one, most likely the exact unit before "Soap.XSBuiltIns", this one is innocent and the error somewhere earlier.
Keep going back, i mean the empty initialization contains a simple ret instruction, which will work always, but some unit initialization before that did ruin you stack.
And to be exact, that exception you are receiving is hardware raised by a ret instruction while the stack value is $ce93d58d instead of the address pointing to right after "TProc(P)();"
Kas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 08:00 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