/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Spørgsmål ang. Brug af TMessage
Fra : Allan Madsen


Dato : 22-11-00 23:07

Hejsa

Har lige et spørgsmål ang. brugen af en TMessage

Er der en måde hvorpå man kan overfør en tekststring via en TMessage her vil
jeg især gerne kunne gøre det via LParam

Jeg skal kunne sende en tekst streng max 255 char, til et andet program.
Jeg har check på hvordan man kan snakke sammen med et andet program via
TMessage, postmessage, men kan man overfør en string via TMessage og hvordan
gør man?

Send gerne svar til alm@123mail.dk også.

På forhånd tak.

--
Med venlig hilsen / Yours
Allan Madsen
alm@123mail.dk
http://home.123mail.dk/alm



 
 
Niels (niLLer) (22-11-2000)
Kommentar
Fra : Niels (niLLer)


Dato : 22-11-00 23:14

Just as I expected, "Allan Madsen" <alm@123mail.dk> came up with this:

>Er der en måde hvorpå man kan overfør en tekststring via en TMessage her vil
>jeg især gerne kunne gøre det via LParam

Prøv at sætte LParam til:

LParam := Pointer(DinString);

Husk at DinString *skal* være en AnsiString eller en PChar, ellers vil
det ikke fungere! Muligvis fungerer det kun med en PChar.

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://xoasis.com/~niller/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- Behind the end of nowhere!

N/A (23-11-2000)
Kommentar
Fra : N/A


Dato : 23-11-00 08:07



Allan Madsen (23-11-2000)
Kommentar
Fra : Allan Madsen


Dato : 23-11-00 08:07

Hej


Jeg kan lige fortælle at det bliver nogle programmer som kommer til at køre
på den samme maskine.


"Stig Johansen" <stig@w3data.dk> skrev i en meddelelse
news:pr1T5.6587$zs.215891@twister.sunsite.auc.dk...
> Hej.
>
>
> Niels (niLLer) <nmartin@ispam.com> wrote in message
> news:3a1c44f8.17202901@news.12move.dk...
> > Just as I expected, "Allan Madsen" <alm@123mail.dk> came up with this:
> >
> > >Er der en måde hvorpå man kan overfør en tekststring via en TMessage
her
> vil
> > >jeg især gerne kunne gøre det via LParam
> >
> > Prøv at sætte LParam til:
> >
> > LParam := Pointer(DinString);
> >
> > Husk at DinString *skal* være en AnsiString eller en PChar, ellers vil
> > det ikke fungere! Muligvis fungerer det kun med en PChar.
> >
>
> Bemærk, at Allan skal sende til et andet program. Du kan derfor ikke bare
> referere til en pointer, da hver program har sit eget adresseområde. Hvis
> det skal gøres korrekt, flexibelt samt portabelt, er den bedste måde (så
> vidt jeg ved) at bruge Client/Server-socket.
>
> Jeg tænker selvfølgelig på fordeling på flere maskiner, Delphi for Linux
> (når det kommer).
>
>
> --
> Med venlig hilsen/Best Regards
> Stig Johansen - stig@w3data.dk
> W3 Data - mailto@w3data.dk
>
>
>
>



Carsten Jakobsen (23-11-2000)
Kommentar
Fra : Carsten Jakobsen


Dato : 23-11-00 09:08

Som også andre har pointeret kan du ikke dele memory mellem to processer, så
din ide med at sende en streng via sendMessage() duer altså ikke (med mindre
du sender et tegn ad gangen .

Løsningen på problemet kan være ReadProcessMemory og WriteProcessMemory, men
det er altså lidt langhåret, og ikke noget man bare lige gør. Jeg kan
desværre ikke lige give et lille nemt eksempel, for det findes ikke. Du må
prøve dig frem.

MVH Carsten

"Allan Madsen" <alm@123mail.dk> wrote in message
news:NuXS5.1238$A52.20309@news000.worldonline.dk...
> Hejsa
>
> Har lige et spørgsmål ang. brugen af en TMessage
>
> Er der en måde hvorpå man kan overfør en tekststring via en TMessage her
vil
> jeg især gerne kunne gøre det via LParam
>
> Jeg skal kunne sende en tekst streng max 255 char, til et andet program.
> Jeg har check på hvordan man kan snakke sammen med et andet program via
> TMessage, postmessage, men kan man overfør en string via TMessage og
hvordan
> gør man?
>
> Send gerne svar til alm@123mail.dk også.
>
> På forhånd tak.
>
> --
> Med venlig hilsen / Yours
> Allan Madsen
> alm@123mail.dk
> http://home.123mail.dk/alm
>
>



Roald Henriksen (24-11-2000)
Kommentar
Fra : Roald Henriksen


Dato : 24-11-00 00:07

Du SKAL benytte memorymapping, når to eller flere programmer skal dele data.
Nedenfor er vist et eksempel med en tekststreng, men det kunne lige så godt
være en record eller andet.

Først en komplet unit (frit fra Phytia, tror jeg nok):

unit ShareMap;

interface

uses Windows, SysUtils;

type
TShareMapping = class
private
MappingHandle: THandle;
FSize: integer;
FData: Pointer;
public
constructor Create(ShareName: string; BufferSize: integer);
destructor Destroy; override;
property Data: Pointer read FData;
property Size: integer read FSize;
end;
{
Denne klasse anvender samme interface for processen der opretter bufferen
og andre processer. Create vil forsøge at åbne en eksisterende file mapping
med det angivne navn overført via ShareName. Hvis dette forsøg mislykkes
vil der blive oprettet en ny file mapping.
}

implementation

{ TShareMapping }

constructor TShareMapping.Create(ShareName: string; BufferSize: integer);
begin
MappingHandle:= OpenFileMapping(FILE_MAP_ALL_ACCESS,
False, PChar(ShareName));
if MappingHandle = 0
then begin
MappingHandle:= CreateFileMapping(
$FFFFFFFF,
nil,
PAGE_READWRITE,
0,
BufferSize,
PChar(ShareName));
if MappingHandle = 0
then raise Exception.Create('Unable to create file mapping')
end;
FData:= MapViewOfFile(MappingHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if FData = nil
then raise Exception.Create('Unable to map view of buffer');
FSize:= BufferSize;
end;

destructor TShareMapping.Destroy;
begin
if FData <> nil then UnmapViewOfFile(FData);
if MappingHandle <> 0 then CloseHandle(MappingHandle);
end;

end.

Slut på unit ShareMap.


Vi fortsætter, hvert program kodes således:

Implementation
uses ShareMap;
{$R *.DFM}
type
DataStreng = string[128]; {skal være fast længde, ikke dynamisk}
var
PDataIndUd: ^DataStreng;
SM1: TShareMapping;
MyMsg: cardinal;

procedure formcreate...
begin
SM1:= TShareMapping.Create('DataFremOgTilbage',SizeOf(DataStreng));
PDataIndUd:= SM1.Data;
MyMsg:= RegisterWindowMessage('TestAfDataSharing');
end;

procedure formdestroy...
begin
SM1.Free;
end;

procedure læs...
var
LineData: string;
begin
LineData:= PDataIndUd^;
end;

procedure skriv...
var
LineData: string;
begin
PDataIndUd^:= LineData;
end;

Og endelig kan du anvende PostMessage med variablen MyMsg til at vække de
andre programmer, når der er ny data.

Mvh RH




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408928
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste