AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

Ein Thema von Bbommel · begonnen am 26. Nov 2020 · letzter Beitrag vom 27. Nov 2020
Antwort Antwort
Der schöne Günther

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

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 26. Nov 2020, 19:57
Habe da einiges recherchiert.
HModule <> THandle
Ganz sicher?

Windows SDK:
Code:
typedef PVOID HANDLE;
typedef HANDLE HINSTANCE;
typedef HINSTANCE HMODULE;
Die Delphi RTL ebenso:
Delphi-Quellcode:
  THandle = NativeUInt;
  HINST = THandle; { HINSTANCE from widnef.h }
  HMODULE = HINST; { from windef.h }
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 26. Nov 2020, 20:02
Habe da einiges recherchiert.
HModule <> THandle
Ganz sicher?

Windows SDK:
Code:
typedef PVOID HANDLE;
typedef HANDLE HINSTANCE;
typedef HINSTANCE HMODULE;
Die Delphi RTL ebenso:
Delphi-Quellcode:
  THandle = NativeUInt;
  HINST = THandle; { HINSTANCE from widnef.h }
  HMODULE = HINST; { from windef.h }
Es geht hier um 64Bit und 32Bit.
Nein aber so wie ich gelesen (Recherchiert) habe ist Cardinal 64Bit und THandle 32 oder?
http://codeverge.com/embarcadero.del...hi-get/1071384

Geändert von venice2 (26. Nov 2020 um 20:10 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 26. Nov 2020, 20:44
Es geht hier um 64Bit und 32Bit.
Nein aber so wie ich gelesen (Recherchiert) habe ist Cardinal 64Bit und THandle 32 oder?
Am besten direkt an die Doku halten, da ist das klar definiert:
http://docwiki.embarcadero.com/Libra...ystem.Cardinal
Zitat:
The size of Cardinal is 32 bits across all 64-bit and 32-bit platforms.
http://docwiki.embarcadero.com/Libra...tem.NativeUInt
Zitat:
The size of NativeUInt is equivalent to the size of the pointer on the current platform.
Auch wenn ich nicht weiß was "Cardinal" damit jetzt zu tun hat. HMODULE = HINST = THandle , egal wieviel Bit.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 26. Nov 2020, 21:02
Es geht hier um 64Bit und 32Bit.
Nein aber so wie ich gelesen (Recherchiert) habe ist Cardinal 64Bit und THandle 32 oder?
Am besten direkt an die Doku halten, da ist das klar definiert:
http://docwiki.embarcadero.com/Libra...ystem.Cardinal
Zitat:
The size of Cardinal is 32 bits across all 64-bit and 32-bit platforms.
http://docwiki.embarcadero.com/Libra...tem.NativeUInt
Zitat:
The size of NativeUInt is equivalent to the size of the pointer on the current platform.
Auch wenn ich nicht weiß was "Cardinal" damit jetzt zu tun hat. HMODULE = HINST = THandle , egal wieviel Bit.
Nun ja wie dem auch sei.
Ich arbeite unter 64Bit meistens mit LONG_PTR da bin ich auf der sicheren Seite.

Am ende habe ich nur versucht zu ergründen woran das liegen könnte.
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 26. Nov 2020, 21:22
Ersetze doch auch das raise Exception.Create(..) mal durch RaiseLastOSError(), dann können wir auch sehen was Windows selbst dazu sagt warum es nicht geht.

Auch: Wir sehen dass du dir eine DLL anschaust, was sie denn exportierst. Aber sind wir uns wirklich sicher dass er auch genau diese DLL einlädt? Ich weiß nicht ob das wasserdicht ist, aber im Zweifelsfall führe ich immer where.exe im .exe-Verzeichnis aus und lasse sie nach der DLL suchen. Ich meine der listet die gefundenen Treffer in der gleichen Reihenfolge auf wie LoadLibrary(..) suchen würde...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 26. Nov 2020, 22:30
WHERE sollte nur den %PATH% zum Suchen nuzten, inkl. %PATHEXT%.
(WHERE /R sucht ähnlich wie FOR /R)

LoadLibrary macht da bissl was Anderes.
Aber Debugger, SysInternals oder GetModuleFileName (mit dem Handle der DLL) helfen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Nov 2020 um 22:48 Uhr)
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
669 Beiträge
 
Delphi 12 Athens
 
#7

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 27. Nov 2020, 07:39
Ersetze doch auch das raise Exception.Create(..) mal durch RaiseLastOSError(), dann können wir auch sehen was Windows selbst dazu sagt warum es nicht geht.
Guter Hinweis, probiere ich nachher mal aus.

Auch: Wir sehen dass du dir eine DLL anschaust, was sie denn exportierst. Aber sind wir uns wirklich sicher dass er auch genau diese DLL einlädt? Ich weiß nicht ob das wasserdicht ist, aber im Zweifelsfall führe ich immer where.exe im .exe-Verzeichnis aus und lasse sie nach der DLL suchen. Ich meine der listet die gefundenen Treffer in der gleichen Reihenfolge auf wie LoadLibrary(..) suchen würde...
Ihr seid euch nicht sicher, aber ich. Ich hatte ja schon im Eingangspost geschrieben, dass ich mir mit dem ProcessMonitor angeschaut habe, welche DLL genau geladen wird. Da wird defintiv die richtige geladen und auch nur diese eine.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#8

AW: GetProcAddress liefert kein Ergebnis unter Win64, unter Win32 schon

  Alt 27. Nov 2020, 07:46
[OT]
Zitat:
Ihr seid euch nicht sicher, aber ich.
[/OT]
Ich glaube dir
  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 18:06 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