Zitat von
Delphi-Laie:
Also Du hattest recht: Die Lazarus-
Unit „jwatlhelp32“ scheint in der 64-Bit-Version des Lazarus' (gibts auch eine 64-Bit-Version dieser
Unit?) die Toolhelpfunktionen nicht zu unterstützen.
Inwiefern äußert sich das? Kompiliert alles? Funktioniert es nur zur Laufzeit nicht?
Zitat von
Delphi-Laie:
Sooo schnell gebe ich allerdings nicht auf. Auf Dateinamensgleichheit geprüft (müßte aber stimmen, sonst gäbe es ja eine Fehlermeldung), und tatsächlich, auch unter meinem Windows XP 64 Bit heißt die angesprochene, angeforderte
DLL „kernel32.dll“. Zur Sicherheit auch noch den Dependency Walker darübergejagt, doch auch die Funktionen in(nerhalb) der
DLL schmücken sich inkonsequenterweise mit dem Zusatz (der Endung) „32“.
Kannst du mal bitte eine Liste der exportierten Namen deiner kernel32.dll, die hier verwendet werden, posten? Ich habe leider noch kein 64-Bit Windows, mit dem ich rumspielen könnte.
Zitat von
Delphi-Laie:
Nun tauschte ich alle DWORD-Typdeklarationen in der „tlhelp32.pas“ mit „Int64“ aus. Auch das wird fehlerfrei compiliert und eingebunden. Doch die Toolhelpfunktionen scheinen immer noch nicht zu klappen, zu funktionieren, verfügbar zu sein, was auch immer. Es gibt keine Fehlermeldung, jedoch auch keine Funktionswirkung.
Nein, das ist meiner Meinung nach nicht das Problem. Unter Windows 64-Bit haben sich diese Strukturen nicht geändert (ich hab im
MSDN nachgeschaut) und auch ein DWord ist und bleibt 32-Bit.
Zitat von
Delphi-Laie:
Weißt Du oder weiß jemand anderes noch einen Rat, Toolhelpfunktionen unter Lazarus 64 Bit verfügbar zu machen?
Funktioniert es denn, wenn du deine Anwendung als 32-Bit Anwendung kompilierst?
Zitat von
implementation:
1. DWord ist vorzeichenlos und Int64 vorzeichenbehaftet. Das 64bit-Pendant zu DWord ist QWord/LongWord/UInt64.
Unter Free Pascal sind das nur QWord und UInt64, wobei letzteres ein Alias auf QWord ist. LongWord ist ganz falsch, da dieser auch unter 64-Bit ein 32-Bit unsigned ist.
Zitat von
implementation:
2. Wie schon geschrieben wurde, sind sehr viele Assemblerblöcke drin, die eben alle für 32 bit geschrieben sind. Die müsste man alle nochmal umschreiben, damit alles vernünftig liefe.
Und direkt danach habe ich geschrieben, dass die Assemblerblöcke in der jwatlhelp32 (falls du diese meinst) alle nicht verwendet werden, da die Units mit deaktivierten DYNAMIC_LINK Define kompiliert werden und stattdessen statisches Linken (mit "external (...)") verwendet wird.
Zitat von
implementation:
Zitat von
Delphi-Laie:
Weißt Du oder weiß jemand anderes noch einen Rat, Toolhelpfunktionen unter Lazarus 64 Bit verfügbar zu machen?
Direkte Nutzung der
Win32-
API (ja, die heißt immer noch so
, sagt zumindest das Windows
SDK).
Das macht zwar die Portierung auf andere Plattformen unmöglich, aber das scheint ja so wie so keine Rolle zu spielen.
Ähm... was anderes macht Delphi-Laie ja gerade nicht... nur dass er schon vorgefertigte Importunits verwendet...
Gruß,
Sven