AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinden?
Thema durchsuchen
Ansicht
Themen-Optionen

DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinden?

Ein Thema von Delphi-Laie · begonnen am 11. Mär 2010 · letzter Beitrag vom 1. Dez 2013
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#41

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 22. Mär 2010, 16:49
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.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#42

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 22. Mär 2010, 21:17
Allmählich habe ich den Eindruck, daß der Fehler überall sonst gesucht wird, nur nicht bei Lazarus.

Nunja....sicher ist man selbst in den allermeisten Fällen wirklich der Schuldige, aber immer?

Daß es an der tlhelp32-Unit nicht liegen kann, versuche ich mit jetzt einem weiteren Argument zu untermauern. Im Gegensatz zum Prozeßschnappschuß funktioniert mit meinem Lazarus 64 Bit der Modulschnappschuß, mit dem sich ebenfalls der Exe-Dateiname ermitteln läßt. Nach meiner Beobachtung ist es immer der erste Eintrag des Modulschnappschusses (also Modul32First), der den Exe-Dateinamen liefert, der Rest sind DLL-Dateinamen.

So habe ich auf die Schnelle in Luckies schon oben strapaziertem WinInfo-Programm den Modulschnappschuß implementiert, den tlhelp32 analog zur Verfügung stellt. Mit diesem Schnappschuß funktioniert die Ermittlung und folglich Ausgabe des Exe-Dateinamens sowohl in der 32- als auch in der 64-Bit-Version!

Anbei die beiden vollständig funktionstüchtigen Compilate mit den Quelltexten.

Reicht das als Beweis, daß die tlhelp32-Unit unschuldig ist?

Grüße

Delphi-Laie
Angehängte Dateien
Dateityp: 7z wininfo_mit_modulschnappschu_f_r_lazarus_178.7z (151,9 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#43

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 6. Mai 2010, 13:10
Ist zwar schon ein wenig her, aber trotzdem.... allen, die mir in dieser Diskussion halfen, danke ich noch einmal herzlich!

Inzwischen bin ich mir sicher, daß es ein Fehler in Lazarus ist; der ausführliche Fehlerbericht findet sich hier.

Ich beobachte es immer wieder: Wenn man irgendwo einen Fehler ausgrub, sei es in Windows, sei es in Delphi oder in Lazarus, und den in den Foren berichtet, kommt allerdings reflexartig immer ein Abstreiten desselben bzw. ein Schieben desselben auf einen selbst - warum bloß?!
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#44

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 7. Mai 2010, 23:49
Hi!

Ich weiß nicht, ob du es mitbekommen hast (oder wirst ), aber ich habe dir in deinem Bugreport geantwortet und ein Anwendung angehängt, die du vielleicht mal testen könntest (näheres in dem dortigen Post).

Leider habe ich es nicht geschafft ein 64-Bit Windows zu installieren, da die Installation in QEMU die ganze Zeit meinte nen BSOD bringen zu müssen... leider hab ich auch nur Windows 7 x64 und Windows Server 2008 R2 x84 zur Verfügung und kein Windows XP x64 oder Windows Server 2003 x64 (die gibt's bei uns an der Uni einfach nicht zum runterladen ).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#45

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 8. Mai 2010, 13:13
Tausend Dank, alles weitere dort (auch mein wichtigster Teilerfolg!!)!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#46

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 9. Mai 2010, 10:57
Hallo JamesTKirk/Sven,

mein Bugreport wurde etwas überraschend geschlossen, allerdings artete es dort zugegebenermaßen auch immer mehr zur Diskussion aus.

Mir sind noch zwei Dinge klargeworden:

1. Die Modulenumeration funktioniert bei den Systemprozessen (Ring 0 / Kernelmodus) deshalb nicht, weil das (anforderbare) Privileg dazu fehlt.
2. explorer.exe und cmd.exe sind 64-Bit-Prozesse, während andere, die über ihre Module bereitwillig auskunfteten, 32-Bit-Prozesse waren. Es war wohl unter der Würde der 64-Bit-Prozesse, einem anfragenden 32-Bit-Prozeß Auskunft über die Module zu geben (salopp formuliert).

Wenn nun Lazarus noch standardmäßig mit der die tlhelp64-Unit oder mit einer angepaßten jwatl32help (jwatl64help?!) aufgebohrt würde, wäre es optimal, und solche Bugreports wie meiner wären dann überflüssig.

Dir nochmals herzlichen Dank! Leider kann ich Dmitry an dieser Stelle kaum danken....

Delphi-Laie
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#47

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 9. Mai 2010, 13:18
Hi!

Zitat von Delphi-Laie:
mein Bugreport wurde etwas überraschend geschlossen, allerdings artete es dort zugegebenermaßen auch immer mehr zur Diskussion aus.
1. wurde er nicht "geschlossen", sondern auf "resolved" gesetzt (schließen musst du ihn noch). Du könntest ihn wieder öffnen, aber das bringt aus meiner Sicht nichts, da das Problem ja nun nicht mehr im FPC Code liegt
2. das Thema ist aus Sicht des Bugreports erledigt (denn es funktioniert ja jetzt prinzipiell, wenn ich dass deiner Antwort dort richtig entnommen habe) und jede weitere Diskussion sollte nicht im Bugtracker stattfinden

Zitat von Delphi-Laie:
1. Die Modulenumeration funktioniert bei den Systemprozessen (Ring 0 / Kernelmodus) deshalb nicht, weil das (anforderbare) Privileg dazu fehlt.
Jupp, das kann dir unter Windows leicht mal passieren und ist der Normalfall, wenn man nicht als Administrator unterwegs ist (wie es im Konzept von NT ja eigentlich gedacht war... *seufz*).

Zitat von Delphi-Laie:
2. explorer.exe und cmd.exe sind 64-Bit-Prozesse, während andere, die über ihre Module bereitwillig auskunfteten, 32-Bit-Prozesse waren. Es war wohl unter der Würde der 64-Bit-Prozesse, einem anfragenden 32-Bit-Prozeß Auskunft über die Module zu geben (salopp formuliert).
Ich würde nicht behaupten, dass dies "unter der Würde" der Prozesse ist, sondern vielmehr eine Designentscheidung von Microsoft (schließlich geben dir nicht die Prozesse Auskunft über sich, sondern das Betriebssystem gibt dir die Auskunft und dieses hat die volle Kontrolle über die Informationen). Es ist wahrscheinlich zu riskant einem 32-Bit Prozess auf diese Weise Zugang zu den 64-Bit Modulen zu gewähren (schließlich kann ein 32-Bit Prozess nicht mit 64-Bit virtuellem Speicher umgehen, etc).

Zitat von Delphi-Laie:
Wenn nun Lazarus noch standardmäßig mit der die tlhelp64-Unit oder mit einer angepaßten jwatl32help (jwatl64help?!) aufgebohrt würde, wäre es optimal, und solche Bugreports wie meiner wären dann überflüssig.
1. jwatlhelp32 ist Teil von Free Pascal (genauer: FCL), nicht Lazarus. Es gibt also keinen Grund Lazarus "aufzubohren".
2. Der Bug wurde gefixt und wird eventuell Teil des nächsten Releases werden (eventuell werde ich bitten den Fix in FPC 2.4.1 zu mergen), es besteht also gar kein Bedarf eine tlhelp64 einzuführen. Zudem heißt der C-Header auch in Win64 noch tlhelp32.h
3. Du hast einen Fehler in Free Pascal Code entdeckt und damit ist es nur gut und recht, wenn du diesen berichtest, selbst wenn ein ähnlicher Report bereits vorhanden und in der Entwicklerversion bereits gefixt wurde. Ganz nach dem Prinzip "doppelt hält besser". Und selbst wenn man Lazarus oder Free Pascal mit einer hypothetischen tlhelp64 ausstatten würde, so könnte auch diese noch Bugs enthalten, die berichtet werden wollen.

Wenn du noch weiter Probleme mit der tlhelp32 frag also bitte hier weiter (oder in einem neuen Thread, je nachdem was den Mods lieber ist ).

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#48

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 9. Mai 2010, 15:56
Howdy!

Zitat von JamesTKirk:
Zitat von Delphi-Laie:
mein Bugreport wurde etwas überraschend geschlossen, allerdings artete es dort zugegebenermaßen auch immer mehr zur Diskussion aus.
1. wurde er nicht "geschlossen", sondern auf "resolved" gesetzt (schließen musst du ihn noch). Du könntest ihn wieder öffnen, aber das bringt aus meiner Sicht nichts, da das Problem ja nun nicht mehr im FPC Code liegt
??
Nach dem Einloggen konnte ich weder editieren noch etwas neues verfassen. Damit hat sich das für mich erledigt. Ob ich das schließe oder nicht, wird wohl für niemanden mehr irgendeine Bedeutung haben.

Zitat von JamesTKirk:
Zitat von Delphi-Laie:
1. Die Modulenumeration funktioniert bei den Systemprozessen (Ring 0 / Kernelmodus) deshalb nicht, weil das (anforderbare) Privileg dazu fehlt.
Jupp, das kann dir unter Windows leicht mal passieren und ist der Normalfall, wenn man nicht als Administrator unterwegs ist (wie es im Konzept von NT ja eigentlich gedacht war... *seufz*).
Administrator bin ich auf eigenen Computern grundsätzlich. Es fehlte das zusätzlich zu ordernde Privileg. Da ich nunmehr weiß, wie man sich das holt, werden alle Programme, für die es nützlich ist, damit ausgestattet werden.

Zitat von JamesTKirk:
Zitat von Delphi-Laie:
Wenn nun Lazarus noch standardmäßig mit der die tlhelp64-Unit oder mit einer angepaßten jwatl32help (jwatl64help?!) aufgebohrt würde, wäre es optimal, und solche Bugreports wie meiner wären dann überflüssig.
1. jwatlhelp32 ist Teil von Free Pascal (genauer: FCL), nicht Lazarus. Es gibt also keinen Grund Lazarus "aufzubohren".
Einverstanden. Ich zähle den Unterbau mit dazu (auch der Bugtrucker heißt ja Lazarus), auch wenn er genaugenommen (s)eine eigene Bezeichnung hat.

Zitat von JamesTKirk:
(eventuell werde ich bitten den Fix in FPC 2.4.1 zu mergen)
Du bist also in das Lazarus-/FP(C)-Projekt stärker als Otto Normalsterblicher (wie meine Wenigkeit einer ist) involviert?

Dank & Gruß

Delphi-Laie
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#49

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 9. Mai 2010, 16:20
[OT]

Was ist ein Bugtrucker? Ein Bug, der LKW fährt? Oder meinst du den Bugtracker?
Weil du dieses Wort ja in insgesamt 3 Beiträgen (in unterschiedlichen Themen) erwähnst
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#50

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 9. Mai 2010, 18:30
Hi!

Zitat von Delphi-Laie:
??
Nach dem Einloggen konnte ich weder editieren noch etwas neues verfassen. Damit hat sich das für mich erledigt. Ob ich das schließe oder nicht, wird wohl für niemanden mehr irgendeine Bedeutung haben.
Am unteren Ende deines Bugreports (vor den Kommentaren) müssten sich jetzt (wenn du eingeloggt bist) drei Buttons und eine Combobox befinden. Ein Button heißt "Change status to:" und ein anderer "Reopen issue". Mit dem ersten kannst du den Bugreport endgültig schließen (und dabei einen abschließenden Kommentar abgeben) und mit dem zweiten kannst du den Eintrag wieder neu öffnen (ist dann nützlich, wenn man mit der Lösung nicht einverstanden ist ).

Zitat von Delphi-Laie:
Administrator bin ich auf eigenen Computern grundsätzlich. Es fehlte das zusätzlich zu ordernde Privileg. Da ich nunmehr weiß, wie man sich das holt, werden alle Programme, für die es nützlich ist, damit ausgestattet werden.
Ich ziehe das "principle of least privilege" vor (und unter Windows 7 funktioniert das mittlerweile sogar anständig ), aber das muss ja jeder selbst wissen, was er bevorzugt.

Zitat von Delphi-Laie:
Zitat von JamesTKirk:
Zitat von Delphi-Laie:
Wenn nun Lazarus noch standardmäßig mit der die tlhelp64-Unit oder mit einer angepaßten jwatl32help (jwatl64help?!) aufgebohrt würde, wäre es optimal, und solche Bugreports wie meiner wären dann überflüssig.
1. jwatlhelp32 ist Teil von Free Pascal (genauer: FCL), nicht Lazarus. Es gibt also keinen Grund Lazarus "aufzubohren".
Einverstanden. Ich zähle den Unterbau mit dazu (auch der Bugtrucker heißt ja Lazarus), auch wenn er genaugenommen (s)eine eigene Bezeichnung hat.
Das liegt wohl daran, dass du dir nur die Bugs für Lazarus anzeigen lässt. Geht man oben auf "All Projects" oder "FPC", so heißt er "freepascal bugtracker", aber das nur am Rande.

Zitat von Delphi-Laie:
Zitat von JamesTKirk:
(eventuell werde ich bitten den Fix in FPC 2.4.1 zu mergen)
Du bist also in das Lazarus-/FP(C)-Projekt stärker als Otto Normalsterblicher (wie meine Wenigkeit einer ist) involviert?
Ich bin auf jeden Fall kein Stammentwickler von einem der beiden Projekte, falls du das meinst. Allerdings habe ich schon einige Patches abgeliefert, die eingebunden wurden und berichte auch fleißig Bugs und Feature Requests, die mir so auf- und einfallen. Zudem bin ich bei den Hauptmailinglisten eingetragen und scheue auch nicht da mal zu antworten oder ein eigenes Thema zu starten.
Das mit dem Mergen war nur ein Angebot von mir an dich, dass ich an die FPC-Community weiterleiten würde, da ich weiß, wo man so eine Bitte anbringt.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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 00:40 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