AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [NonVCL] Problem WndProc; Pointer mit Daten füllen
Thema durchsuchen
Ansicht
Themen-Optionen

[NonVCL] Problem WndProc; Pointer mit Daten füllen

Ein Thema von NickelM · begonnen am 14. Mär 2012 · letzter Beitrag vom 16. Apr 2012
Antwort Antwort
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

AW: [NonVCL] Problem WndProc; Pointer mit Daten füllen

  Alt 14. Mär 2012, 15:36
@Blup: WParam wird manchmal als Index verwendet, falls er höher ist als 0. Bei 0 leg ich den Index anders fest, aber das ist nicht das Prob, da trotzdem die Variable Text gefüllt wird. Sonst hast du völlig Recht. Nach meiner Kenntniss sollte es funken, aber dies tut es ja nicht .

EDIT: Doffe Frage, kann es sein, das ich erst irgendwie meiner WndProc (z.b. dem Programm) Rechte geben muss um auf den Speicher von der DLL-Variable zuzugreifen? Anscheinend macht die normale WndProc noch irgendwas, um in den Speicherbereich von der Variablen schreiben zukönnen. Oder irre ich da?
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.

Geändert von NickelM (14. Mär 2012 um 15:40 Uhr)
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

AW: [NonVCL] Problem WndProc; Pointer mit Daten füllen

  Alt 14. Mär 2012, 17:26
Das habe ich mir auch schon gedacht. Aber warum funkt dann SendMessageA(WindowH,WM_GETTEXT,50,Integer(@StreamName) ?
WindowH wird doch, wie ich Windows kenne, auch ein Pointer auf irgendein Speicher sein. Weil das liesst ja von der anderen Anwendung den Fenster-Titel aus. Oder liegt das in einer Art Globalen Windows Speicher?
Naja, ich versuch mal ob ich das mit WM_COPYDATA irgendwie hinbekomme, was ich möchte.
Würd mich troztdem interessieren warum die oben genannte Zeile funkt. Die müsste eigentlich ja dan auch nicht funktionieren.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: [NonVCL] Problem WndProc; Pointer mit Daten füllen

  Alt 14. Mär 2012, 18:09
Njain, Handle haben nichts mit Pointern zu tun. (auch wenn einige weniger Handle aktuell intern als Pointer verwaltet werden, wie z.B. das Handle von geladenen Modulen, wie DLLs)

Stell die Handle eher als Index in einer Liste vor.

Bei Messages wie WM_TEXT haben die Parameter eine vorgegebene Funktion, bzw. ein definiertes Datenformat, welches Windows kennt.
Demnach kann Windows dort auch den entsprechenden Speicher kopieren, wenn er in ein anderes Programm rüber muß.
Bei WM_COPYDATA wird ebenfalls angegeben wie und wo Daten liegen und Windows kann sich ebenfalls um das Kopieren kümmern.

Ansonsten (vorallem bei eigenen Messages) kann man eben nur Integer übergeben.
Oder Anderes, welches als global eindeutiger Wert darin übergeben werden kann. (z.B. globale Handle)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#4

AW: [NonVCL] Problem WndProc; Pointer mit Daten füllen

  Alt 14. Mär 2012, 21:28
Hm...also gibt es keine Möglichkeit auser WM_COPYDATA, irgendeine Variable zuerzeugen, egal ob Handle oder Pointer, die ich per SendMessage von der Plugin-DLL an die Anwendung übergeben kann um dort wieder auf meine Daten, die ich irgendwo hinterlegt habe, von 2 verschiedene Anwendungen drauf zugreifen kann?
Ich hab schon viel von Pipes gehört usw. , aber wie gesagt nur gehört. Ob das damit geht, weis ich auch nicht. Hab grad nen bischen mit GlobalAlloc und VirtualAlloc getestet, auch bei GlobalAlloc, den Handle an die andere übergeben, kein Unterschied. Ich werde wohl schauen müssen, ob ich irgendwie eine MessageLoop mit einem "unsichtbaren" Fenster in der DLL erzeuge und hoffen, dass ich dan mit WM_COPYDATA die Daten rüberbekomme.

Gruß
NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: [NonVCL] Problem WndProc; Pointer mit Daten füllen

  Alt 14. Mär 2012, 22:44
'ne Pipe ist wie eine Datei ... also eine Art Dateihandle und da diese Prozessgebunden sind, müßtest du bei Übergabe dieses Handle klonen.
Da der Empfänger den Sender nicht kennt und der Kloner das Recht benitzten muß das gewünschte Handle überhaupt klonen zu dürfen, wäre es vermutlich einfacher das Handle gleich beim Sender zu klonen, passend für den Zielprozess.
Oder MMF (Memory Mapped Files).

Tipp: IPC wäre das Thema, worüber du dich informieren solltest.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (14. Mär 2012 um 22:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: [NonVCL] Problem WndProc; Pointer mit Daten füllen

  Alt 14. Mär 2012, 22:54
falls Du Dich mit Pipes beschäftigen möchtest gibt es von Russell nette freie Komponenten, ich habe sie allerdings mittlerweile massiv erweitert und angepasst, der einzige Links den ich auf die Schnelle finden konnte:

http://r3code.livejournal.com/117012.html
http://micksmix.wordpress.com/2011/0...it-for-delphi/
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#7

AW: [NonVCL] Problem WndProc; Pointer mit Daten füllen

  Alt 16. Apr 2012, 17:29
EDIT: Doffe Frage, kann es sein, das ich erst irgendwie meiner WndProc (z.b. dem Programm) Rechte geben muss um auf den Speicher von der DLL-Variable zuzugreifen? Anscheinend macht die normale WndProc noch irgendwas, um in den Speicherbereich von der Variablen schreiben zukönnen. Oder irre ich da?
Nicht der DLL, aber dem Prozess der die DLL benutzt und im Endeffekt MSDN-Library durchsuchenSendMessage aufruft. Seit Vista gibt es da gewisse Mechanismen. Welches System verwendest du denn, gibt es 32/64bit-Schranken und vor allem laufen die Prozesse mit gleicher Privilegienstufe ("Elevation")?

Stichworte: MSDN-Library durchsuchenUIPI (und MSDN-Library durchsuchenChangeWindowMessageFilterEx), MSDN-Library durchsuchenPrivilege Isolation, MSDN-Library durchsuchenIntegrity Levels

Ich hab schon viel von Pipes gehört usw. , aber wie gesagt nur gehört. Ob das damit geht, weis ich auch nicht. Hab grad nen bischen mit GlobalAlloc und VirtualAlloc getestet, auch bei GlobalAlloc, den Handle an die andere übergeben, kein Unterschied.
Die funktionieren nur innerhalb des gleichen Prozesses. Ansonsten: MSDN-Library durchsuchenVirtualAllocEx

Ich werde wohl schauen müssen, ob ich irgendwie eine MessageLoop mit einem "unsichtbaren" Fenster in der DLL erzeuge und hoffen, dass ich dan mit WM_COPYDATA die Daten rüberbekomme.
Ich dachte die DLL schickt die Nachricht? Warum brauchst du dann eine Nachrichtenschleife in der DLL?

Ich wünschte mir, daß die "Generation Google" sich mal wieder in ein Problem verbeißen würde bis es gelöst ist, anstatt auszuweichen oder aufzugeben
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  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 07:33 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