AGB  ·  Datenschutz  ·  Impressum  







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

LoadLibrary() unter D11 ist THandle immer 0

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

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

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 09: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
 
#2

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 18: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.679 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 18: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.342 Beiträge
 
Delphi 12 Athens
 
#4

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 19: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)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Steffer

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

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 10. Mai 2023, 20: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.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: LoadLibrary() unter D11 ist THandle immer 0

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

Wie sieht das Interface der DLL aus?
Vielleicht was mit Unicode?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.932 Beiträge
 
Delphi 12 Athens
 
#7

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 11. Mai 2023, 08:12
Wozu Sharemem ist keine Frage weil einfach vorhanden.
Mein erster Gedanke war auch, ob das eigentlich kompatibel sein kann, aber da es unter XE noch ging, bin ich wieder davon abgekommen, weil ich es nie verwendet habe und keine Ahnung habe, wie das läuft.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Steffer

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

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 11. Mai 2023, 19:53
An alle die sich hier Gedanken gemacht haben vielen Dank.

Hallo,
wird ShareMem überhaupt gebraucht?

Wie sieht das Interface der DLL aus?
Vielleicht was mit Unicode?
Alles prallt da bei mir ab da der Aufruf aus D7 XE funktioniert.
Und LoadLibraray() ist ja keine Zirkusnummer.

Wozu Sharemem ist keine Frage weil einfach vorhanden.
Mein erster Gedanke war auch, ob das eigentlich kompatibel sein kann, aber da es unter XE noch ging, bin ich wieder davon abgekommen, weil ich es nie verwendet habe und keine Ahnung habe, wie das läuft.

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.
Die Verwendung der DLL ist im Prinzip 20 Jahre alt. Diese beinhaltet Anwenderdaten zur Lizenzierung. Die DLL wird in einem Ablauf erstellt. Da hat die Sharemem niemanden interessiert. Die steht da drin, auch wenn sie überholt ist.

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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.932 Beiträge
 
Delphi 12 Athens
 
#9

AW: LoadLibrary() unter D11 ist THandle immer 0

  Alt 16. Mai 2023, 12:02
Wenn jemand Bock auf den Ansatz hat schicke ich gerne den Source zu der DLL aus D7.
Ich würde es gerne kurz ausprobieren, wenn das so überschaubar ist. Ich bräuchte dazu dann auch den Teil der Unit aus Delphi 11, mit dem du die DLL einbindest.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:50 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