Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   LoadLibrary beendet mit Delphi 10.3 Application (https://www.delphipraxis.net/199705-loadlibrary-beendet-mit-delphi-10-3-application.html)

norwegen60 13. Feb 2019 16:50

LoadLibrary beendet mit Delphi 10.3 Application
 
Hallo zusammen,

da ich mit 10.2 ziemliche Performance-Probleme in der IDE hatte habe ich jetzt auf Delphi 10.3 upgedatet. IDE ist wieder etwas schneller.

Auf einigen Rechnern arbeitet meine Anwendung einwandfrei. (Win10 und Win7). Auf zwei Rechnern (beide Win10 Pro) habe ich aber das Problem, dass die Anwendung ohne jegliche Rückmeldung beendet wird sobald ich über
Delphi-Quellcode:
ShowMessage('xxxx: LoadDll4 01');
  Result := GetModuleHandle(PWideChar(sDLL)); // prüfen ob DLL schon geladen

ShowMessage('xxxx: LoadDll4 02');
  if Result = 0 then
    Result := LoadLibrary(pWideChar(sDll)); // DLL dynamisch laden

ShowMessage('xxxx: LoadDll4 03');
eine DLL dynamisch lade.'xxxx: LoadDll4 02' wird noch angezeigt. Danach erscheint die Sanduhr und dann verschwindet die Anwendung aus dem Taskmanager.

Ich habe herausgefunden, dass einfache DLL auch auf diesen beiden Rechnern geladen werden. Die, die zum Abbruch führen, haben eine Datenbankverbindung. Ich habe es mit zwei DLL getestet.
Daraufhin habe ich in das OnCreate des DataModuls eine ShowMessage gesetzt. Das wird aber nicht aufgerufen.

Hat jemand eine Idee woran der Absturz liegen könnte?
Welcher Code in der DLL wird bereits mit dem Aufruf von LaodLibrary ausgeführt?

Ich verwende UniDac für den Zugriff auf MsSQL.


Grüße und Danke
Gerd

Neutral General 13. Feb 2019 16:56

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
DllMain wird beim LoadLibrary aufgerufen.
(Bzw. der Code zwischen begin und end. in der .dpr)

MichaelT 13. Feb 2019 17:04

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Schwer zu sagen.

Wenn ein Anwendung in so einem Fall bei mir abschmierte, dann ging der Griff einer DLL ins Leere.

In puren C implementiere DLLs (MySQL bspw...) kennen kein Exception Handling. Dann liegt es an der DLL auf welche Art der exit erfolgt. Fehlen ganz fundamentalen Funktionen die man in libc würde unter UNIX suchen ist eher Panik angesagt.

Fehlen die MSC/C++ Runtime DLLs? Microsoft Visual C++ Redistributable in der passenden Version?

Zitat:

Zitat von norwegen60 (Beitrag 1425462)
Hallo zusammen,

da ich mit 10.2 ziemliche Performance-Probleme in der IDE hatte habe ich jetzt auf Delphi 10.3 upgedatet. IDE ist wieder etwas schneller.

Auf einigen Rechnern arbeitet meine Anwendung einwandfrei. (Win10 und Win7). Auf zwei Rechnern (beide Win10 Pro) habe ich aber das Problem, dass die Anwendung ohne jegliche Rückmeldung beendet wird sobald ich über
...
Grüße und Danke
Gerd


norwegen60 13. Feb 2019 17:52

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Danke für das schnelle Feedback. Es gibt keine DllMain und kein Code zwischen begin.

Die dpr sieht so aus
Delphi-Quellcode:
uses
  SysUtils,
  Dialogs,
  Classes,
  ComCtrls,
  Forms,
  Ed_user in 'Ed_user.pas' {foedUser},
  Di_uslog in 'Di_uslog.pas' {fodiUserLogin},
  int_User in 'int_User.pas',
  U_hilfs1 in '..\..\All\ALL_UNIT\U_hilfs1.pas',
  u_Debug in '..\All_Unit\u_Debug.pas',
  u_NTRegistry in '..\..\All\All_Unit\u_NTRegistry.pas',
  int_Splash in '..\..\All\ALL_Form\int_Splash.pas',
  u_InitDat in '..\All_Unit\u_InitDat.pas',
  u_IniDo in '..\..\All\All_Unit\u_IniDo.pas',
  U_initFo in '..\ALL_UNIT\U_initFo.pas',
  U_InitDb in '..\ALL_UNIT\U_InitDb.pas',
  dm_ConDoQMa in '..\All_Form\dm_ConDoQMa.pas' {dmConDoQMa: TDataModule},
  u_RegDo in '..\..\All\All_Unit\u_RegDo.pas';

{$R *.RES}

exports
  edUser,
  GetUser,
  InitUser0,
  SetUser;

end.
Die DLL funktionieren seit Jahren auf verschiedensten Rechnern. (Start mit Delphi 3.0, 5.0, 7.0, XE, 10, 10.1, 10.2.x)
Die EXE und die DLL's liegen in einem GroupProject und wurden alle gleich kompiliert.
Die mit Delphi 10.2.2 kompilierte Version läuft problemlos auf ca. 60 Rechnern. Sie liefen auch auf den den beiden Rechnern, die jetzt Probleme bereiten. (Rücksetzung auf die 10.2.2 Version hat das Problem wieder beseitigt)
Nur mit Delphi 10.3 gibt es wieder ein neues Problem.

Grüße
Gerd

hoika 13. Feb 2019 19:14

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Hallo,
ich würde mal den Dependency walker benutzen,
um auf diesen Rechnern mal nachzuschauen, ob irgendeine Dll fehlt.

Aviator 13. Feb 2019 22:25

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Du sagst, dass eine Datenbankverbindung aufgebaut wird. Sind denn die entsprechenden Zugriffskomponenten auf den beiden Systemen vorhanden? Bei MSSQL braucht man ja z.B. je nachdem wie man auf die Datenbank zugreifen will den Native Client.

jaenicke 14. Feb 2019 05:12

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Ich würde als Allererstes den Process Monitor benutzen um zu schauen worauf da zugegriffen wird. Vielleicht fehlen zum Beispiel DLLs für die Datenbankverbindung. Bevor man da aber lange sucht, würde ich immer zuerst schauen, ob dieses externe Log etwas ergibt. Das spart in den meisten Fällen sehr viel Zeit.

MichaelT 14. Feb 2019 08:40

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Ok. Das klingt spannender.

Ich verwende weder Win 10 noch Rio ...

Kann es sein, dass das Projekt in Rio (10.3) 64-bittig wird? (abwegig)

---

Kannst du die DLLs in einem Kommandozeilenprogramm probieren zu laden und schauen ob du mit GetLastError noch genauere Information zurückbekommst?

Zitat:

Zitat von norwegen60 (Beitrag 1425467)
Danke für das schnelle Feedback.

Grüße
Gerd


Neutral General 14. Feb 2019 08:49

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Was noch ausgeführt wird ist der initialization Bereich deiner eingebundenen Units - falls du da irgendwas drin hast?

arnold mueller 15. Feb 2019 19:27

AW: LoadLibrary beendet mit Delphi 10.3 Application
 
Zitat:

Zitat von MichaelT (Beitrag 1425490)
Kann es sein, dass das Projekt in Rio (10.3) 64-bittig wird? (abwegig)

---

Finde ich gar nicht abwegig. Nicht das Rio das automatisch tun würde, aber vielleicht wird die DLL jetzt in 64Bit übersetzt und referenziert weitere 32Bit DLL's.

Nur so ins Blaue getippt ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf