Zapis do pamięci [delphi]

0

Mam pytanie jak można zapisać do pamięci jakiś tekst, a potem żeby drugi program (inny nie ten sam) mógł odczytać dane?.

0

spróbuj zapisać do schowka systemowego

0

Masz wiele możliwość - temat IPC (inter-process communication) jest bardzo szeroki. Przykładowe rozwiązania:

  • pamięć współdzielona
  • przesłanie komunikatu
  • potoki nienazwane
  • potoki nazwane
  • gniazda
  • pliki lokalne
0

Szukałem w necie artykółów dotyczących potoków i pamięci współdzielonych w delphi i nic nie znalazlem. ma ktos jakies linki?

0

No to prosty przykład pamięci współdzielonej.

Aplikacja wysyłająca tekst: przycisk Button1 oraz pole Edit1. Kod naciśnięcia przycisku:

var h:THandle;
    Addr:pchar;
begin
h:=CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 512, 'Test1');
if (h<>0) then
  begin
  Addr:=MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, 512);
  if (Addr<>nil) then
    begin
    StrCopy(Addr, PChar(Edit1.Text));
    UnmapViewOfFile(Addr);
    end;
  Sleep(1200);
  CloseHandle(h);
  end;
end;

Aplikacja obserwująca pamięć: Timer1. Akcja na OnTimer:

var h:THandle;
    Addr:pchar;
begin
h:=CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 512, 'Test1');
if (h<>0) then
  begin
  Addr:=MapViewOfFile(h, FILE_MAP_ALL_ACCESS, 0, 0, 512);
  if (Addr<>nil) then
    begin
    Caption:=Addr;
    UnmapViewOfFile(Addr);
    end;
  CloseHandle(h);
  end;
end;

Krótkie podsumowanie: aplikacja 1 rezerwuje pamięć współdzieloną o nazwie 'Test1' (512 bajtów), pobiera jej uchwyt, kopiuje tam tekst i zwalnia uchwyt, a następnie zasypia na 1200ms, by dać aplikacji 2 czas na odczytanie przed zwolnieniem zarezerwowania pamięci. Aplikacja 2 co 1000ms rezerwuje pamięć o takiej samej nazwie (dostając dostęp do tego samego obszaru co aplikacja 1).

Gdy aplikacja 2 zarezerwuje pamięć po tym, jak aplikacja 1 już zwolniła zarezerwowanie, dostaje pusty obszar, a więc nie będzie w nim tekstu. Dlatego aplikacja 1 zasypia, by dać czas na odczyt ciągle tej przypisanej pamięci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1