Zapis do pamięci [delphi]

Odpowiedz Nowy wątek
2006-09-03 12:49
corel
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?.

Pozostało 580 znaków

2006-09-03 12:54
Luc
0

spróbuj zapisać do schowka systemowego

Pozostało 580 znaków

2006-09-03 13:33
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

<font color="red">Konto porzucone</span>

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir 'Szczawik' Włodkowski

Pozostało 580 znaków

2006-09-03 14:19
Corel
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?

Pozostało 580 znaków

2006-09-03 14:35
0

uzyj nawet tego (po modyfikacji kodu)
http://4programmers.net/Delphi/FAQ/Jak_za%C5%82adowa%C4%87_nasz%C4%85_aplikacj%C4%99_do_pami%C4%99ciinnej)


Pozdrawiam. Karol

Pozostało 580 znaków

2006-09-03 17:30
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.


<font color="red">Konto porzucone</span>

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir 'Szczawik' Włodkowski

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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