![]() |
Sendmessage pointer of array
Hi,
eine kurze frage ich will mit sendmessage einen pointer auf ein array versenden
Delphi-Quellcode:
aber wie bekomme ich den jetzt wieder zugriff auf die arraystruktur ?
type
Mymessage = record msgtext: String[20]; msgint : integer; end; //.... var mymsg: mymessage; //.... procedure TForm1.FormCreate(Sender: TObject); begin mymsg.msgtext:='test'; mymsg.msgint:=1234; end; procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Handle, integer(@mymsg)); end; bei einem string funktiniert es ja ala
Delphi-Quellcode:
aber wie greife ich auf einen wert im array zu ? :freak:
text := string(pchar((pointer(Msg.Info))));
Danke Ralf |
Re: Sendmessage pointer of array
Normalerweise verschickt man sowas doch mit WM_COPYDATA. Du bist Dir sicher, das Deine Version funktioniert? Normalerweise kann ich doch nicht als fremdes Handle in deinen Adressbereich rein... Na egal, ich verwende WM_COPYDATA.
|
Re: Sendmessage pointer of array
Hi,
ja funktioniert gut - ich finde das ist eine schöne möglichkeit variablen zwischen meinen Programmen auszutauschen einfach eine form mit einem label + button code hineinkopieren und 2x das Prog starten..
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; { Basiert auf CodeSnippet [url]http://www.swissdelphicenter.ch/de/showcode.php?id=418[/url] } type TWMMYMessage = record Msg: Cardinal; // ( first is the message ID ) Handle: HWND; // ( this is the wParam, Handle of sender) Info: Longint; // ( this is lParam, pointer to our data) Result: Longint; end; Mymessage = record msgtext: String[20]; msgint : integer; end; TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } procedure DefaultHandler(var Message); override; procedure WMMYMessage(var Msg: TWMMYMessage); end; var Form1: TForm1; WM_OURMESSAGE: DWORD; mymsg: mymessage; strtest : string[30]; implementation {$R *.dfm} procedure TForm1.DefaultHandler(var Message); var ee: TWMMYMessage; begin with TMessage(Message) do begin if (Msg = WM_OURMESSAGE) then begin ee.Msg := Msg; ee.Handle := wParam; ee.Info := lParam; // Checking if this message is not from us if ee.Handle <> Handle then WMMYMessage(ee); end else inherited DefaultHandler(Message); end; end; procedure TForm1.WMMYMessage(var Msg: TWMMYMessage); var text: string; begin text:=string(pchar(pointer(Msg.Info))); delete(text,1,1); Label1.Caption := text; end; procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Handle, integer(@strtest)); //SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Handle, integer(@mymsg)); end; procedure TForm1.FormCreate(Sender: TObject); begin mymsg.msgtext:='test'; mymsg.msgint:=1234; strtest:='strtest'; end; initialization WM_OURMESSAGE := RegisterWindowMessage('broadcast message'); end. |
Re: Sendmessage pointer of array
Zitat:
Der Pointer hat im Adressraum des anderen Prozesses keine Gültigkleit. Du wirst schon WM_COPYDATA benutzen müssen, wen du es so machen willst. Eine Alternative wären Memory Mapped Files oder Named Pipes. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 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