Zitat von
implementation:
Das ist keine Macke, sondern das liegt einfach daran, dass tlhelp32 für 32 Bit geschrieben ist.
Wenn du eine 64-Bit-Version davon gefunden hast, und es immer noch nicht läuft, dann solltest du dich wundern.
Aber 32 und 64 Bit sind nunmal unterschiedlich. Da kannste nix machen.
Die tlhelp32-
Unit tut im Quelltext nicht viel mehr, als neben den nötigen Konstanten-, Typ- und Variablendeklarationen einige - die entsprechenden - Funktionen der kernel32.dll zu importieren. Was soll denn an einem
DLL-Funktionsimport 32- oder 64-bittig sein? Wenn das 64-Bit-Lazarus die
Unit fehlerfrei compiliert, dann liegt das Compilat ja wohl hoffentlich in einer 64-Bit-Version vor? Und falls nicht, wäre es auch nicht schlimm, schließlich funktioniert ja immerhin die 32-Bit-Version.
Es klappte ja nicht einmal (in meinem Programm, nicht Luckies), nur die relevanten Funktionen aus der tlhelp32-
Unit zu extrahieren und unter Verzicht auf diese
Unit in der uses-Anweisung nur die Funktionsimporte direkt in die MainForm-
Unit zu kopieren. Es compiliert, aber die Funktionalität in der Exe ist bestenfalls lausig.
Immerhin funktionieren die 32-Bit-Compilate von Luckies Programm (Delphi und Lazarus) ja auch unter Windows 64 Bit! Nur diese eine Funktion "GetExeStringFromProcID" will in der 64-Bit-Version anscheinend nicht, aber wo hat die 32- oder 64-Bit-Spezifika?? Sie ruft CreateToolHelpSnapShot und - wohl vergeblich - Process32First und Proces32Next auf. Diese Aufrufe haben jedoch keine Bitbreitenspezifik?!
Zitat von
implementation:
Bist du dir sicher, dass die Daten nicht heil bei der
DLL ankommen? Vielleicht liegt auch in der der Fehler. Oder ist es gar eine 32-Bit-
DLL?
Die Daten, die die
DLL aus Dateien zieht, kommen heil bei dieser an, das merke ich ja am Programmverhalten. Die
DLL ist 64 Bit und funktioniert auch teilweise - wenigstens der Modulschnappschuß und die 64-Bit-Hooks. Also, 64 Bit werden tatsächlich erzeugt.
Letztlich kann sich jeder anhand meines Anhangs weiter oben selbst davon überzeugen, daß irgendetwas mit dem 64-Bit-Compilat nicht stimmt.
Zur Zeit probiere, eher fummele ich an der Funktion "GetWindowModuleFileName", denn die wäre vielleicht eine brauchbare Alternative gewesen, aber an der klappt ja
überhaupt nichts.