Avatar billede thecokeguy Nybegynder
16. juli 2006 - 20:52 Der er 12 kommentarer og
1 løsning

Sende data fra et program til et andet

Hej...

Jeg er interesseret i at kunne sende data i form af f.eks. variabler fra et delphi program til et andet...

Eks.
Jeg sender en tekst-streng fra projekt1.exe hvorefter projekt2.exe vil lave en ShowMessage(tekst-streng)...

Hvordan gør jeg det... er det noget med messages jeg skal have fat i?

På forhånd tak...
Avatar billede tjp Mester
16. juli 2006 - 21:35 #1
Du kan jo altid lade programmerne deles om en fil som den ene skriver til og den anden læser fra. Kører programmerne samtidig?
Avatar billede martinlind Nybegynder
16. juli 2006 - 21:49 #2
message procedure på den mainform der skal modtage :

procedure WMCopyData(var Msg : TMessage); message WM_COPYDATA;

----------------------------------------------------------------------
procedure der sender :

procedure SendMSG();
VAR
  R : rMsgRec; // en alm. Record struct
  TargetWnd : hWnd;
  CopyDataStruct : TCopyDataStruct;
begin
  TargetWnd := FindWindow(NIL,cTargetWndCaption);
  with CopyDataStruct do
  begin
      // Fill data to R here
      //
     
      if TargetWnd > 0 then
      begin
        dwData := 5;  // put whatever DWORD value you want here.
        cbData := SizeOf(R);
        lpData := @R;
        // Send the Message WM_CopyData
        SendMessage(TargetWnd, WM_COPYDATA, 0, Longint(@CopyDataStruct));
      end;
  end;
end;
Avatar billede martinlind Nybegynder
16. juli 2006 - 21:50 #3
Det funker fint hvis begge programmer kører samtidig :)
Avatar billede kroning Nybegynder
16. juli 2006 - 22:56 #4
Måske en TCP forbindelse, eller en UDP pakke.
Avatar billede thecokeguy Nybegynder
16. juli 2006 - 23:00 #5
Det jeg tænkte på bliver bedst dækket af martinlind's version, men jeg vil meget gerne høre lidt mere om hvordan UDP pakker fungerer...
Avatar billede kroning Nybegynder
16. juli 2006 - 23:11 #6
Hvis du har Indy installeret er det rimelig enkelt, du sætter en UDP server i det program der skal modtage (TIdUDPServer) til at lytte på en bestemt port. I det program der skal sende bruger du så en UDP klient (TIdUDPClient) til at sende en pakke på den port det andet program lytter på.
Men det er nok lige så let, hvis ikke lettere, at benytte WM_COPYDATA som martinlind skriver, jeg bruger selv WM_COPYDATA og det fungere ganske fint.
Avatar billede kroning Nybegynder
16. juli 2006 - 23:13 #7
Fordelen, hvis du har noget at bruge det til, ved UDP er selfølgelig at du kan sende beskeder til et program på en anden computer på lokal nettet eller via internettet.
Avatar billede kroning Nybegynder
16. juli 2006 - 23:14 #8
Nå ja, lige et ting til. Hvis du skal sende via internettet er UDP ikke en sikker løsning da du ikke kan være sikker på at pakken kommer frem, så via internettet er TCP bedst.
Avatar billede martinlind Nybegynder
14. august 2006 - 19:17 #9
kroning >> det kommer lidt an på hvad det skal bruges til, en "fast" forbindelse kan nogle gange være en ulempe da man jo kan få et program der "hænger" hvis det i den anden ende ikke svarer :), det gør en udp ikke
Avatar billede kroning Nybegynder
14. august 2006 - 19:30 #10
Med mindre man bruger venstre fod til at programmere med så laver man vel normalt en timeout så programmet/tråden ikke kommer til at "hænge".
Avatar billede martinlind Nybegynder
14. august 2006 - 21:28 #11
ja ja, men "fordelen" ved UDP er netop at der ikke er "fast forbindelse"
Avatar billede kroning Nybegynder
14. august 2006 - 22:19 #12
Jeg tror ikke at det at UDP ikke er en "fast forbindelse" normalt bliver betragtet som en fordel, og jeg kan heller ikke se hvorfor det skulle være en fordel.
Avatar billede martinlind Nybegynder
15. august 2006 - 09:42 #13
kroning >> det må du såmænd tror som du har lyst til :), vi kan også kalde det en af forskellene.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester