![]() |
LoadLibrary() unter D11 ist THandle immer 0
Liste der Anhänge anzeigen (Anzahl: 1)
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? |
AW: LoadLibrary() unter D11 ist THandle immer 0
Lädt die DLL noch andere Abhängigkeiten (BPLs, DLLs)?
|
AW: LoadLibrary() unter D11 ist THandle immer 0
Vielleicht liegt es daran, daß System.ShareMem, die Datei borlndmm.dll benötigt und letztere nicht gefunden wird?
|
AW: LoadLibrary() unter D11 ist THandle immer 0
Du solltest einmal mit dem
![]() Zitat:
|
AW: LoadLibrary() unter D11 ist THandle immer 0
Hallo,
die D11-Anwendung ist nicht zufällig 64-Bit? Was liefert LastError? siehe hier ![]() |
AW: LoadLibrary() unter D11 ist THandle immer 0
Danke für die Antworten.
Zitat:
Zitat:
Zitat:
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. Zitat:
Last Error ist "Eine DLL-Initalisierungsroutine ist fehlgeschlagen". Nur wird keine Initialisierung verwendet. |
AW: LoadLibrary() unter D11 ist THandle immer 0
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. |
AW: LoadLibrary() unter D11 ist THandle immer 0
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) |
AW: LoadLibrary() unter D11 ist THandle immer 0
Zitat:
Die DLL D7 ist ja so fertig und ich schaue mal ob dann D11 beim dynamischen / statischen laden mit der Sharemem ein Problem hat. Zitat:
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 |
AW: LoadLibrary() unter D11 ist THandle immer 0
Hallo,
wird ShareMem überhaupt gebraucht? Wie sieht das Interface der DLL aus? Vielleicht was mit Unicode? |
AW: LoadLibrary() unter D11 ist THandle immer 0
Zitat:
Wenn du dir aber nicht sicher bist, ob es gebraucht wird, kann es natürlich unter XE noch funktioniert haben, weil es schlicht überflüssig ist. Insofern wäre es schon wichtig, dir die exportierte Funktion diesbezüglich anzuschauen. Wenn die exportierte Funktion sauber umgesetzt ist, sprich nur WideString oder PAnsiChar/PWideChar usw. und keine Delphi-Strings verwendet werden, braucht man Sharemem auch nicht. Entferne Sharemem doch einfach mal aus der uses. Wenn es daran liegt, kannst du die DLL auf jeden Fall korrekt laden. Es gibt dann zwar ggf. später Fehler, aber zum Testen kannst du es ja ohne versuchen. |
AW: LoadLibrary() unter D11 ist THandle immer 0
An alle die sich hier Gedanken gemacht haben vielen Dank.
Zitat:
Und LoadLibraray() ist ja keine Zirkusnummer. Zitat:
Das die mir jetzt bei D11 und Loadlibrary() auf die Füße fällt hätte ich nicht erwartet. Es ist wie es ist. Ich mache daraus jetzt keine Doktorarbeit. Habe heute x Stunden mit x Versionen experimentiert. Diese alten DLLs werden durch neue DLLs auf Basis D11 ersetzt. Ist umständlicher aber die sichere Lösung ohne Basteln etc. Nochmals vielen Dank an alle die mitgedacht haben. Wenn jemand Bock auf den Ansatz hat schicke ich gerne den Source zu der DLL aus D7. |
AW: LoadLibrary() unter D11 ist THandle immer 0
Zitat:
|
AW: LoadLibrary() unter D11 ist THandle immer 0
Zitat:
Ist absolut überschaubar. Du bekommst Source und kompilierte DLL aus D7 sowie die Testanwendung als Source und kompiliert in einem Zip. Kann ich dir das als persönliche Nachricht senden oder muss ich es hier al Anlage senden? Habe hier keine Erfahrung im Umgang. |
AW: LoadLibrary() unter D11 ist THandle immer 0
Ich habe dir eine private Nachricht geschickt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz