AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein LoadLibrary() unter D11 ist THandle immer 0
Thema durchsuchen
Ansicht
Themen-Optionen

LoadLibrary() unter D11 ist THandle immer 0

Ein Thema von Steffer · begonnen am 7. Mai 2023 · letzter Beitrag vom 17. Mai 2023
Antwort Antwort
Seite 1 von 2  1 2      
Steffer

Registriert seit: 21. Jul 2012
7 Beiträge
 
#1

LoadLibrary() unter D11 ist THandle immer 0

  Alt 7. Mai 2023, 19:11
Hi,

bei einer Umstellung auf D11 stelle ich fest das eine eine benötigte DLL nicht laden kann. Handle ist immer 0.
Es geht nicht um die weitere Verarbeitung sondern nur um das Laden der DLL.

Handle:= LoadLibrary('mydll.dll');

Die DLL ist mit D7 erstellt und beinhaltet nur eine Function von 7 Zeilen.
Sharemem ist da noch die erste uses.
Eine vollkommene harmlose Geschichte.

Habe eine Testanwendung erstellt um diese und andere DLLs via LoadLibrary() zu laden.
Auch ganz einfache Geschichte: RadioGroup mit mehreren Optionen und einem Button und 2 Labels als Ausgabe
ob die DLL gefunden wird und ob Handle <> 0 ist.

Diese Testanwendung unter D7, XE und D11 erstellt.
D7 und XE können die DLL laden.
D11 nicht. Hier kommt Errorcode 1114, siehe Anlage.

Das Problem bleibt bestehen:
Wenn ich das ganze auf mehreren Rechnern teste.
Auch wenn in diese Testexe Sharemem als erste uses integriert wird.
Wenn die DLL im Verzeichnis der Testexe liegt oder mit einem Pfad gesucht wird.

Hat jemand dazu einen Ansatz?
Miniaturansicht angehängter Grafiken
1114.jpg  
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 09:43
Lädt die DLL noch andere Abhängigkeiten (BPLs, DLLs)?
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#3

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 09:48
Vielleicht liegt es daran, daß System.ShareMem, die Datei borlndmm.dll benötigt und letztere nicht gefunden wird?
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 09:54
Du solltest einmal mit dem Process Monitor schauen, ob da versucht wird, auf etwas anderes zuzugreifen, z.B. wie schon genannt auf eine andere DLL. Dafür setzt du dort einfach den Filter auf Process Name is DeineExe.exe und lässt die Fehlermeldung offen. Dann kannst du die letzten Meldungen prüfen.

Sharemem ist da noch die erste uses.
Eine vollkommene harmlose Geschichte.
Sharemem würde ich nicht als harmlos bezeichnen, sondern als Notlösung.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 10:10
Hallo,
die D11-Anwendung ist nicht zufällig 64-Bit?

Was liefert LastError?
siehe hier
https://stackoverflow.com/questions/...does-this-mean
Heiko
  Mit Zitat antworten Zitat
Steffer

Registriert seit: 21. Jul 2012
7 Beiträge
 
#6

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 19:25
Danke für die Antworten.

Lädt die DLL noch andere Abhängigkeiten (BPLs, DLLs)?
Nein, nichts.


Vielleicht liegt es daran, daß System.ShareMem, die Datei borlndmm.dll benötigt und letztere nicht gefunden wird?
borlndmm.dll liegt in C:\Windows\SysWOW64 und würde ja dann auch beim Test mit D7, XE Probleme machen.


Du solltest einmal mit dem Process Monitor schauen, ob da versucht wird, auf etwas anderes zuzugreifen, ...
Da ist nichts.
Die Exe hat ein kleines Form mit

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

Die DLL
uses
Sharemem,
SysUtils,
Classes,

Und mit D7 und XE eben keine Probleme.


Hallo,
die D11-Anwendung ist nicht zufällig 64-Bit?

Was liefert LastError?
siehe hier
https://stackoverflow.com/questions/...does-this-mean
Die 64-Bit Geschichte war auch so über Nacht mein Gedanke, ist aber nicht.

Last Error ist "Eine DLL-Initalisierungsroutine ist fehlgeschlagen".
Nur wird keine Initialisierung verwendet.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

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

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 19:33
Mal so in die Runde geworfen: Ist denn Sharemem von Delphi 7 (DLL) und Delphi 11 (Executable) überhaupt kompatibel? Ersteres benutzt die borlndmm.dll letzteres FastMM ohne DLL.

Ich habe noch nie versucht, diese beiden Versionen zu kombinieren.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#8

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 20:05
EXE und DLL jeweils mit dem "selben" Delphi kompiliert?


Ja, erstmal sollte jemand natürlich alle Rückgaben von LoadLibrary auswerten.
Eine Exception beim Laden der DLL seint es nicht zu sein, aber GetLastError/RaiseLastOSError werden bestimmt irgendwas sagen.



ShareMem und SimpleShareMem (weiß nicht mehr seit wann es das gab) gibt es weiterhin.
Und es müsste auch egal sein ob FastMM oder BorlandMM/DelphiMM. Die Schnittstelle des ShareMem hat sich ja praktisch nicht geändert (glaub ich).

* ShareMem (benötigt BorlndMM.dll)

* SimpleShareMem (nutzt intern AttemptToUseSharedMemoryManager/ShareMemoryManager und verwendet den Speichermanager des zuerst geladenen Moduls EXE/DLL/BPL)



Aber zusätzlich kommt noch. Wozu das ShareMem?
Du willst doch nicht etwa Delphi-Strings oder Objekte mit der DLL teilen?
Im Delphi 2009 wurde die interne Struktur der LongStrings (vor allem AnsiString) verändert. (und ein/zwei Jahre danach nochmal ein bissl)



Nja, natürlich könnte man auch mal die DLL debuggen. (am Einfachsten im Delphi 7, aber rudimentär ginge es auch im neuen Delphi, wenn man Assembler mag)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Steffer

Registriert seit: 21. Jul 2012
7 Beiträge
 
#9

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 21:04
Mal so in die Runde geworfen: Ist denn Sharemem von Delphi 7 (DLL) und Delphi 11 (Executable) überhaupt kompatibel? Ersteres benutzt die borlndmm.dll letzteres FastMM ohne DLL.

Ich habe noch nie versucht, diese beiden Versionen zu kombinieren.
Danke. Das ist für mal so "geworfen" wenigstens ein Ansatz. Job für morgen.
Die DLL D7 ist ja so fertig und ich schaue mal ob dann D11 beim dynamischen / statischen laden mit der Sharemem ein Problem hat.


EXE und DLL jeweils mit dem "selben" Delphi kompiliert?


Ja, erstmal sollte jemand natürlich alle Rückgaben von LoadLibrary auswerten.
...


... Die Schnittstelle des ShareMem hat sich ja praktisch nicht geändert (glaub ich).

Aber zusätzlich kommt noch. Wozu das ShareMem?
Rückgabe loadLibrary siehe oben.

An der ShareMem hat sich einiges geändert. Dachte auch es wäre eine Leiche die durchgeschleppt wird.

Wozu Sharemem ist keine Frage weil einfach vorhanden.
Und es geht nicht um Rückgaben etc. sondern einfach nur um LoadLibrary
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 11. Mai 2023, 06:56
Hallo,
wird ShareMem überhaupt gebraucht?

Wie sieht das Interface der DLL aus?
Vielleicht was mit Unicode?
Heiko
  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 20:18 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