AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

Ein Thema von AJ_Oldendorf · begonnen am 3. Jan 2017 · letzter Beitrag vom 3. Jan 2017
Antwort Antwort
Seite 1 von 2  1 2      
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#1

DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 13:52
Hallo,
ich habe ein kleines Problem und ich denke das ist nur irgendeine Einstellung im OS, komme aber nicht drauf.

Folgender Code geht in meiner XE7 Umgebung (Win10 x64):
Delphi-Quellcode:
var
  myDllHandle: HMODULE;
  sFilePath: String;
begin
  sFilePath := 'C:\WINDOWS\system32\myTest.dll';

  if FileExists(sFilePath) then
  begin
    myDllHandle := SafeLoadLibrary(sFilePath);
    if myDllHandle <> 0 then
    begin
      ShowMessage('Laden erfolgreich');
    end;
  end;
Der gleiche Code in meiner Delphi 10.1 Umgebung geht nicht.
FileExists liefert noch True aber in myDllHandle steht dann eine 0.
Die Dll ist definitiv da und ist in beiden Umgebungen die gleiche.
Diese liegt eigentlich im SysWow64 aber das wird dann ja umgeswitcht in System32.
Also im System32 liegt direkt KEINE Dll von mir.

Habt ihr spontan eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:24
Delphi-Quellcode:
myDllHandle := {SafeLoadLibrary}LoadLibrary(sFilePath); // falls SafeLoadLibrary das GetLastError beeinflusst, weil dort nach dem LoadLibrary noch andere APIs aufgerufen werden
if myDllHandle <> 0 then
  ShowMessage('Laden erfolgreich')
else
  RaiseLastOSError;
Aber wenn diese Datei sowieso im System-Verzeichnis liegt, würde ich niemals den Pfad mit angeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:27
Sind es die gleichen .dproj-Dateien? Startest du aus der IDE oder die .exe direkt aus dem Explorer?

Mir fällt nur ein dass man in der IDE ja bspw. die Umgebungsvariablen standardmäßig abgeändert sind...


Ich kenne SafeLoadLibrary jetzt nicht, was ist denn wenn du ganz normal LoadLibrary(..) nimmst und danach, wenn es fehlschlägt, schaust was RaiseLastOsError() zurückgibt?
(Wurde schon erwähnt)
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#4

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:36
Habe es so versucht:
LoadLibrary(@sFilePath); //SafeLoadLibrary(sFilePath); GetLastError:
ERROR_MOD_NOT_FOUND
126 (0x7E)
The specified module could not be found.

Habe die gleiche Exe Datei jeweils getestet ohne Delphi IDE
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
126 Beiträge
 
Delphi 12 Athens
 
#5

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:37
Eventuell eine doofe Frage, aber ist die DLL eine 64 Bit DLL und das Target in Delphi 10 auch?
Also passt die "bittness" zusammen?
Björn Reimer
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#6

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:38
Auch ohne komplette Pfadangabe und mit LoadLibrary kommt ErrorCode 126
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#7

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:39
Target ist immer 32 bit, immer die gleiche Exe (compiliere zwischendurch NICHT neu, sondern kopiere nur die Exe von A nach B).
DLL ist 32bit
OS ist 64bit
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:43
Die Suchmaschine meines Vertrauens zu "ERROR_MOD_NOT_FOUND" brachte das hier hervor:

http://flashexperiments.insh-allah.c...eError126.html

Hört sich eigentlich plausibel an: Deine DLL ist noch von anderen DLLs abhängig - Und die fehlen.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:44
Vielleicht ein Berechtigungsproblem? Was passiert, wenn die Exe als Admin ausgeführt wird? Wirklich explizit Rechtsklick -> Als Administrator ausführen.
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
126 Beiträge
 
Delphi 12 Athens
 
#10

AW: DLL Laden Win10 x64 - XE7 <-> Delphi 10.1 Berlin

  Alt 3. Jan 2017, 15:50
Target ist immer 32 bit, immer die gleiche Exe (compiliere zwischendurch NICHT neu, sondern kopiere nur die Exe von A nach B).
DLL ist 32bit
OS ist 64bit
Dann ist aber der Pfad C:\WINDOWS\system32 eventuell nicht korrekt. Unter einem 64 Bit System sucht er die 32 Bit DLLs eigentlich unter C:\Windows\SysWOW64. Im 32 Bit Prozess ist dieser Pfad dann "virtuell" über C:\WINDOWS\system32 erreichbar.

Im 64Bit Explorer also Datei unter C:\Windows\SysWOW64 ablegen!

Das ist die komische Magie von Microsoft bei 64 Bit Systemen.
Björn Reimer
  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 06:45 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