AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?
Thema durchsuchen
Ansicht
Themen-Optionen

32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

Ein Thema von SearchBot · begonnen am 25. Mai 2016 · letzter Beitrag vom 17. Sep 2022
Antwort Antwort
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

  Alt 16. Sep 2022, 22:41
Zitat:
das geht nicht
...
nicht direkt
Zitat:
Exakt so würde ich es auch handhaben, x64.exe spricht über ipc eine x86.exe an, übermittelt auch die dafür benötigten daten, die x86 ruft die funktion wie gewohnt auf und sendet das ergebnis an x64 zurück.
... ja, prima, schön .. wenn es denn (hoffentlich irgendwie) geht --- wie denn nun ?
"Der Brei scheint heiß ? Wie bekommt man den auf den Teller und genießbar runter ?"

Lasst mich bitte als Hobby-Progger nicht dumm sterben und erklärt das doch mal bitte für Dummies wie mich und andere im Klartext einfach.

Ich will einfach nur aus einer 32er DLL mittels div. vorh. Funktionen ein paar Werte lesen, bzw. mit Parameter-Übergabe Werte setzen.
Mehr (erst mal) nicht.

Ich habe absolut keine Ahnung, wie das in Sachen DCOM / COM / In-Process-Server.
Ein paar sinnvolle Tipps / Links wären sehr hilfreich ,,,,
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

  Alt 16. Sep 2022, 23:07
1. 32Bit exe erstellen.
2. Diese über deine Anwendung 64Bit starten
3. Rückgabe prüfen ob das Handle der Anwendung existiert.

4. 32Bit exe mit der Message WM_COPYDATA ausstatten... Messagen senden. Beispiele wie das geht einfach hier im Forum suchen.
5. Konstante anlegen. Diese muß in der 64Bit und der 32Bit exe gleich sein.

Wenn du jetzt die DLL laden willst Voraussetzung du hast das Handle der 32Bit exe dann schickst du einfach diese Message aus der 64Bit Anwendung.

6. WM_COPYDATA muss in beiden Exe Dateien vorhanden sein.
Zum senden und empfangen.

Geändert von venice2 (17. Sep 2022 um 17:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

  Alt 16. Sep 2022, 23:56
Wenn ich das nun so weit richtig verstanden habe, dann muss ich:

- 1)
... eine 32er App als "Wrapper" erstellen, welche die 32er DLL lädt und die Funktionen/Daten via Message als WM_COPYDATA bereitstellt / übergibt.
- 2)
den v.g. Wrapper mit "ShellExecute" laden.
- 3)
... und dann Messages / Daten mit dem Wrapper austauschen.

So soll es funtionieren ?
Werde ich zeitnah testen und gebe Info.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

  Alt 17. Sep 2022, 00:10
So soll es funtionieren ?
Ja!

Geändert von venice2 (17. Sep 2022 um 17:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

  Alt 17. Sep 2022, 00:31
Weil es eben nicht DIE Lösung gibt.

Wie gesagt, entweder man kann was Allgemeines nehmen, dann ist alles fast schon fertig (DCOM/COM)
oder du mußt eben alles selber machen (dir die WrapperEXE bauen und das Interface in dein Programm).

Und wie die beiden dann miteinander Reden, da gibt es auch massenhaft Lösungen ... nennt sich allgemein IPC.
SendMessage (auch WM_COPYDATA oder nicht), MMF, TCP, Pipes oder sonstwas Höheres, so in Richtung Client/Server ala REST, SOAP, DataSnap bzw. RADServer, mORMot uvm.

Man kann die Funktionen im Interface genauso bauen, wie das was die DLL exportiert, und kapselt darin dan was wirklich die Verbindung macht
oder man kann es auch anders machen und das die Verbindung machende direkt verwenden
oder ...
(Ersteres hat den Vorteil, dass es für das nutzenden Programm egal ist, was wie dazwischen passiert, da die Funktionsaufrufe unverändert bleiben, also so als ob die DLL direkt benutzt würde)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (17. Sep 2022 um 00:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

  Alt 17. Sep 2022, 13:26
Ich hab das hier nun mittels WM_COPYDATA gelöst.
Finde ich zwar irgendwie ein bischen "von hinten durch die Brust ins Auge" ... aber es funktioniert tadellos.

Dazu hab ich einen Variant-Record gebastelt, den ich die Sendmessage hänge.
Je nach Anforderung darin liest oder schreibt der Wrapper in/aus der DLL und gibt den ggf. gefüllten Record gleich wieder zurück.

Praktisch ist, das TWmCopyData den Handle des aufrufenden Prog in Msg.From mitliefert und der Wrapper ohne zu wissen wer da "anfragt" die Antwort gleich wieder zurückschicken kann.

Mit ShellExecute und SW_HIDE gestartet habe ich kein Fenster ... und auch kein Icon in der Taskleiste ?!
Eine Sendmessage mit WM_CLOSE macht den Wrapper bei Programmende wieder zu.
Fühlt sich nun so an, als wenn da gar nichts zwischenhängt.
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: 32bit-DLL mit LoadLibrary auf einem 64bit-System laden?

  Alt 17. Sep 2022, 17:12
Eine kleine Klinke ist doch noch da:
Das senden von Daten an die DLL und von da zum 'Gerät' geht so weit ja prima.

Jetzt hätte ich aber z.B. auch gern Daten zurück (vom 'Gerät' gelesen) bzw. das Ergebnis der aufgerufen Funktion....

Die Antwort vom Wapper kommt ja immer in der Message-Routine und das ist (logo ?) eine andere wie die welche Daten anfragt.

Die urspüngliche Funktionalität, der anfragenden Funktione per var einen Paramter zu geben und den nach 'Request' wieder zurückzubekommen ist dahin ...

Hat jemand eine Idee, wie man man das ohne nennenswerte Klimmzüge wieder hinbekommt ?
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 12:05 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