CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Komunikacja pomiędzy programami

Komunikacja pomiędzy programami

dział ogólny

Komunikacja pomiędzy programami

Nowy postprzez politech » piątek, 10 września 2010, 22:39

Mam pytanie czy jest możliwa i jeśli tak to jakimi metodami(jakieś naprowadzenie do materiałów, z których mogłbym się dowiedzieć jak) komunikacją pomiędzy dwoma programami tzn pisze program, który ma za zadanie odpalić inny wybrany program i wpisać w niego jakieś dane( powiedzmy ze program, z którym chce się połączyć ma pola imie nazwisko i moj program ma je wypełnić danymi)
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez Cyfrowy Baron » sobota, 11 września 2010, 10:13

To zadanie można rozwiązać na wiele sposobów, przy czym nie chodzi tutaj o programu typu klient-serwer, lecz zwykłe programy. Takie programy mogą komunikować się poprzez pliki, czyli np. program A tworzy jakiś plik z instrukcjami do wykonania i uruchamia program B, który ten plik odczytuje i wykonuje zawarte w nim instrukcje. Program B musi być oczywiście tak zaprogramowany, by przetworzyć i wykonać instrukcje.
Jeżeli program B ma np. wykonać jakieś zlecone zadanie na starcie, czyli w chwili uruchomienia, to można przekazać mu polecenia z linii komend. Program A uruchamia program B i przekazuje mu polecenia poprzez linię komend. Program B musi oczywiście rozpoznawać te komendy, czyli trzeba mu zaprogramować wszystkie komendy i instrukcje które ma wykonać po odebraniu konkretnej komendy. To rozwiązanie działa nie tylko gdy program jest uruchamiany, gdyż można przekazać argumenty linii komend również do działającego już programu, trzeba tylko w programie odbierającym polecenia, zablokować możliwość uruchamiania kopii programu. Przykład takiego działania aplikacji znajdziesz np. w moim pakiecie trzech programów Babilon dostępnym w dziale Aplikacje do pobrania. Dostępne są tam dwie aplikacji Babilon.exe i CEditor.exe. Aplikacja Babilon może np. uruchomić program CEditor i wysłać mu poprzez linię komend nazwę gatunku filmu oraz tytuł filmu. Program CEditor odbiera te informacje i na tej podstawie wczytuje odpowiednie informacje z bazy danych, czyli film wybrany w programie Babilon. Program Babilon nie wysyła do programu CEditor wszystkich danych które zawiera, a tylko informacje o tym co zawiera, czyli tutaj gatunek i tytuł filmu. CEditor na tej podstawie przeszukuje bazę danych i wczytuje ten film. Wygląda to tak, jakby jeden program przekazał kompletne dane do drugiego, ale tak nie jest, gdyż takiej liczby danych nie da się przekazać poprzez linię komend. Poza tym program Babilon może przekazać hasło chroniące dostęp do wybranego tytułu, dzięki czemu CEditor może wczytać ten tytuł z bazy danych bez pytania użytkownika o hasło. Cały mechanizm opiera się na tym, że program CEditor ma zaprogramowane komendy, czyli rozpoznaje konkretną komendę i wie co zrobić gdy otrzyma taką komendę.
Inny sposób to komunikacja programów np. poprzez schowek. Czyli jeden program wysyła dane do schowka, drugi program nasłuchuje i w zadanych odstępach czasu monitoruje schowek sprawdzając jego zawartość. Po odczytaniu ze schowka konkretnych danych wykonuje zawarte w nich instrukcje.


Materiały: ► patrz serwis: Cyfrowy Baron
porady -> różne -> przekazywanie do programu argumentów z linii komend
porady -> API -> Uruchamianie programu z wybranym do edycji plikiem - sposób trudniejszy
spis wszystkich porad -> Aplikacje -> Zablokowanie uruchomienia kopii programu
porady -> API -> Zablokowanie uruchomienia kopii programu - sposób drugi.
porady -> API -> Obsługa schowka.


Są jeszcze sposoby oparte na mechanizmie OLE, ale to raczej dość trudne. Można też wysyłać komunikat, np. za pomocą funkcji SendMessage lub PostMessage ale komunikaty to akurat najmniej skuteczna metoda. Inne sposoby nie przychodzą mi do głowy.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez polymorphism » sobota, 11 września 2010, 12:07

A dlaczego komunikaty to najmniej skuteczna metoda? Są jak najbardziej ok. Powiedziałbym, że komunikacja via pliki jest średnia. Już lepiej zastosować pamięć współdzieloną. Ale tak sobie myślę, że te wszystkie metody nie będą dobre, ponieważ politech chce odpalać aplikację, która nie jest jego autorstwa...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez politech » sobota, 11 września 2010, 13:10

dokładnie zależy mi na komunikacji z programem, z który nie był pisany przezemnie
Avatar użytkownika
politech
Homos antropiczny
Homos antropiczny
 
Posty: 56
Dołączył(a): poniedziałek, 26 lipca 2010, 13:21
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2006
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez polymorphism » sobota, 11 września 2010, 13:28

Za mało szczegółów, żeby można było coś sensownego napisać.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez Cyfrowy Baron » sobota, 11 września 2010, 13:43

politech napisał(a):dokładnie zależy mi na komunikacji z programem, z który nie był pisany przeze mnie


Trzeba było tak od razu. Sądziłem, że chcesz stworzyć dwie aplikacje, z których jedna steruje drugą. W tym przypadku najlepsze byłoby OLE lub sterowanie za pomocą komunikatów. Jednakże używanie komunikatów ma swoje ograniczenia wynikające z API systemu Windows. W przypadku o którym pisałem wcześniej, a dotyczącym programu Babilon, nie dałoby się zastosować komunikatów, gdyż program oczekuje konkretnych danych a nie poleceń.



polymorphism napisał(a):A dlaczego komunikaty to najmniej skuteczna metoda? Są jak najbardziej ok. Powiedziałbym, że komunikacja via pliki jest średnia.


Dlatego, że ta metoda wysyła konkretne komunikaty zdefiniowane w API systemu Windows, a co w przypadku gdy chcę wysłać konkretne dane?! Co do komunikacji poprzez pliki, to rzeczywiście to najgorsza metoda z możliwych, już lepsza byłaby komunikacja poprzez schowek. Podałem jednak sposób na komunikację programu poprzez linię komend. Jest to metoda prosta i skuteczna, ale działa tylko z aplikacjami, które zostały do tego celu zaprogramowane.



polymorphism napisał(a):Już lepiej zastosować pamięć współdzieloną.


Ten temat jest mi raczej obcy i chętnie zobaczyłbym jakiś działający przykład, coś prostego.



Jeżeli chcesz sterować obcym programem i oczekujesz jakichś konkretnych odpowiedzi to musisz podać więcej danych. Co to za program? Jak chcesz nim sterować, czyli co chcesz by robił. W przypadku tak ogólnego pytania jakie zadałeś, mogę Tobie tylko polecić serwis Cyfrowy Baron dział: teoria -> Sterowanie obcym programem z poziomu własnego poprzez wysyłanie komunikatów.
Co się zaś tyczy OLE, to niedawno ten temat był poruszany w tym wątku: http://www.programowanie.cal.pl/forum/viewtopic.php?f=2&t=1039
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez MisticFrezer » sobota, 11 września 2010, 14:23

Moim zdaniem to coś w tym stylu:

http://burururu.netne.net/?p=315

Co prawda, artykuł jest o tym, czym zastapic mutexy, ale schemat jest podobny.
Avatar użytkownika
MisticFrezer
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): wtorek, 23 lutego 2010, 23:57
Lokalizacja: Wrocław
Podziękował : 1
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP3, Windows 7 Pro
Kompilator: BCB6, RAD Studio 2010, VS 2010
Gadu Gadu: 0
    Windows XPOpera

Re: Komunikacja pomiędzy programami

Nowy postprzez Cyfrowy Baron » sobota, 11 września 2010, 14:32

Co prawda, artykuł jest o tym, czym zastapic mutexy, ale schemat jest podobny.


No przecież podałem linki do tych tematów w serwisie Cyfrowy Baron, w swoim wcześniejszym poście. To jest przykład blokowania uruchomienia kopii programu i wysyłania poleceń z linii komend.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez MisticFrezer » sobota, 11 września 2010, 15:16

Fakt, w przytoczonym przeze mnie artykule pamięć wspóldzielona może byc tylko pomiędzy instancjami tej samej aplikacji, niemniej artukuł jest ciekawy.
Ostatnio głowiłem się, jak wysłać string za pomocą SendMessage, bo tego u Barona nie ma. Tak można właśnie przesyłac dane za pomocą komunikatów ale niestety program docelowy musi potrafic je obsłużyć / odebrać.
Obca aplikacja najprawdopodobniej odpada.

Może się jednak momuś przyda:

Wysyłanie
Kod: Zaznacz cały
                 
char * wysylany = "Fajny string";

COPYDATASTRUCT ds;
        ds.dwData = 0;
        ds.cbData = strlen(wysylany)+1;
        ds.lpData = wysylany;
        SendMessage(hwnd, WM_COPYDATA, 0, (LPARAM)&ds);

Odbieranie
Kod: Zaznacz cały
void __fastcall TForm1::WndProc(TMessage &Msg)
{
  switch(Msg.Msg)
  {
      case WM_COPYDATA:

         PCOPYDATASTRUCT arg = (PCOPYDATASTRUCT)Msg.LParam;
         ShowMessage((char*)arg->lpData);
      break;
  }

  TForm::WndProc(Msg);
}


Sztuczka przez PostMessage nie działa. (pewnie dlatego, że PostMessage ustawia się w kolejce komunikatów a wtedy wysyłany adres traci ważność i nic sie nie dzieje)

Dzięki COPYDATASTRUCT można przesłać dowolną rzecz, nie tylko string. Argument wparam funkcji SendMessage tutaj ustawiony na zero może służyc do rozróznienia rodzajów wysyłanych danych, bo komunikat musi być typu WM_COPYDATA. (nie wiem czy typ to dobre słóko, ale każdy rozumie ocb)
Avatar użytkownika
MisticFrezer
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): wtorek, 23 lutego 2010, 23:57
Lokalizacja: Wrocław
Podziękował : 1
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP3, Windows 7 Pro
Kompilator: BCB6, RAD Studio 2010, VS 2010
Gadu Gadu: 0
    Windows XPOpera

Re: Komunikacja pomiędzy programami

Nowy postprzez polymorphism » sobota, 11 września 2010, 15:21

W tym przypadku najlepsze byłoby OLE (...)

Zważ tylko, że OLE automation nie jest domyślnie zaimplementowane w każdej aplikacji. Choć oczywiście jeśli mowa o IE/Word/Excel, to tak.

Dlatego, że ta metoda wysyła konkretne komunikaty zdefiniowane w API systemu Windows

Poczytaj o WM_USER.

(...) a co w przypadku gdy chcę wysłać konkretne dane?!

Poczytaj o WM_COPYDATA.

Ten temat jest mi raczej obcy i chętnie zobaczyłbym jakiś działający przykład, coś prostego.

Poeksperymentuj z mapowaniem plików - oczywiście w tym przypadku nie mapujesz na konkretny plik.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez Cyfrowy Baron » sobota, 11 września 2010, 15:33

Podany przez Ciebie kod jest w pewnym stopniu niekompletny. Część zadania powinna być realizowana w pliku nagłówkowym projektu w WINAPI:

plik źródłowy projektu np. Project1.cpp
KOD cpp:     UKRYJ  
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR cmdLine, int)
{
     try
     {
     HANDLE hMutex = OpenMutex( MUTEX_ALL_ACCESS, 0, L"Unikalna_Nazwa_Mutex");

     if(!hMutex)
     {
      hMutex = CreateMutex(0, 0, L"Unikalna_Nazwa_Mutex");
     }
     else
     {
      HWND hWnd = FindWindow(L"TForm1", 0); // nazwa klasy powinna być unikalna, by uniknąć pomyłki
      SetForegroundWindow(hWnd);

      if(wcslen(cmdLine) != 0)
      {
       COPYDATASTRUCT cds;
       cds.cbData = (wcslen(cmdLine) + 1) * 2; // *2 dla typu wchar_t
       cds.lpData = cmdLine;
       
       SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)&cds);
      }
      return 0;
     }
        Application->Initialize();
        SetApplicationMainFormOnTaskBar(Application, true);
        Application->Title = "Tytuł aplikacj";
        Application->CreateForm(__classid(TForm1), &Form);
        Application->Run();

   ReleaseMutex(hMutex);
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}


plik nagłówkowy głównego okna programu np. Unit1.h
KOD cpp:     UKRYJ  
private:
        void __fastcall WmCopyData(TWMCopyData& Message);
        String Param1, Param2, Param3;


plik źródłowy głównego okna programu np. Unit1.cpp
KOD cpp:     UKRYJ  
void __fastcall TEdytorMainForm::WmCopyData(TWMCopyData& Message)
{
 String slCmdLine = (wchar_t*)Message.CopyDataStruct->lpData;
 slCmdLine = slCmdLine.Trim();

 if(slCmdLine.Pos("\"") > 0)
 {
  slCmdLine = slCmdLine.Delete(slCmdLine.Pos("\""), 1);

  param1 = slCmdLine.SubString(1, slCmdLine.Pos("\"") - 1);

  slCmdLine = slCmdLine.Trim();
  slCmdLine = slCmdLine.Delete(1, slCmdLine.Pos("\""));
  slCmdLine = slCmdLine.Trim();
  slCmdLine = slCmdLine.Delete(slCmdLine.Pos("\""), 1);

  param2 = slCmdLine.SubString(1, slCmdLine.Pos("\"") - 1);

  slCmdLine = slCmdLine.Trim();
  slCmdLine = slCmdLine.Delete(1, slCmdLine.Pos("\""));
  slCmdLine = slCmdLine.Trim();
  slCmdLine = slCmdLine.Delete(slCmdLine.Pos("\""), 1);

  param3 = slCmdLine.SubString(1, slCmdLine.Pos("\"") - 1);
 }
 else param1 = slCmdLine;

 if(param1.IsEmpty()) return;

 if(param1 == "polecenie z linii komend")
 {
  // jakieś zadanie
 }

 if(param2 == "polecenie z linii komend")
 {
  // jakieś zadanie
 }

 if(param3 == "polecenie z linii komend")
 {
  // jakieś zadanie
 }

 param1 = ""; param2 = ""; param3 = "";
}
//---------------------------------------------------------------------------
void __fastcall TEdytorMainForm::FormShow(TObject *Sender)
{
 if( !ParamStr(1).IsEmpty() ) param1 = ParamStr(1);
 if( !ParamStr(2).IsEmpty() ) param2 = ParamStr(2);
 if( !ParamStr(3).IsEmpty() ) param3 = ParamStr(3);

 if(param1.IsEmpty()) return;

 if(param1 == "polecenie z linii komend")
 {
  // jakieś zadanie
 }

 if(param2 == "polecenie z linii komend")
 {
  // jakieś zadanie
 }

 if(param3 == "polecenie z linii komend")
 {
  // jakieś zadanie
 }

 param1 = ""; param2 = ""; param3 = "";
}
 


W podanym przykładzie obsługiwane są maksymalnie 3 argumenty z linii komend. Wymaga to dopracowania. W zdarzeniu WmCopyData jest parsowanie polecenia linii komend, to dla sytuacji gdy przesyłany są więcej niż jeden argument składający się z wielu wyrazów ujętych w cudzysłowy. By zrozumieć działanie tego mechanizmu trzeba poćwiczyć.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez Cyfrowy Baron » sobota, 11 września 2010, 15:37

Odnośnie uwag polimorphism. Co się tyczy podanych przez ciebie komunikatów WM_USER i WM_COPYDATA, to aplikacja musi mieć zaimplementowaną obsługę komunikatów w ten sposób przesyłanych. Poza tym WM_COPYDATA zaproponowałem w przypadku przesyłania danych do aplikacji za pomocą linii komend. Tutaj oczywiście mój błąd, gdyż wysyłanie poleceń z linii komend również opiera się na wysyłaniu komunikatów.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez polymorphism » sobota, 11 września 2010, 15:47

Cyfrowy Baron napisał(a):(...) to aplikacja musi mieć zaimplementowaną obsługę komunikatów w ten sposób przesyłanych.

To oczywiste, tak samo jak to, że aplikacja musi mieć zaimplementowaną komunikację poprzez pliki czy linię komend, żeby mogła te "komunikaty" poprawnie obsłużyć. W przypadku linii komend trudno mówić o komunikatach, bardziej tu pasuje słowo "parametry".

Głównie chodziło mi o pokazanie, że jest to jeden z prostszych sposobów komunikacji między procesowej (IPC). Wcale nie gorszy...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez Cyfrowy Baron » sobota, 11 września 2010, 15:57

Twoje słowa:

polymorphism napisał(a):Głównie chodziło mi o pokazanie, że jest to jeden z prostszych sposobów komunikacji między procesowej (IPC). Wcale nie gorszy...


przeciwko moim:

Cyfrowy Baron napisał(a):Podałem jednak sposób na komunikację programu poprzez linię komend. Jest to metoda prosta i skuteczna, ale działa tylko z aplikacjami, które zostały do tego celu zaprogramowane.




polymorphism napisał(a):To oczywiste, tak samo jak to, że aplikacja musi mieć zaimplementowaną komunikację poprzez pliki czy linię komend, żeby mogła te "komunikaty" poprawnie obsłużyć.


No ale później rozmawialiśmy już o obcej aplikacji, czyli takiej, która niekoniecznie ma zaimplementowaną obsługę parametrów i właśnie w takiej sytuacji komunikaty WM_USER i WM_COPYDATA już się na nic nie przydadzą. O taką sytuację mi chodziło, gdy wspomniałem o tym, że wysyłanie komunikatów opiera się na konkretnych komunikatach zawartych w API, gdyż niektóre z tych komunikatów aplikacja obsłuży, nawet jeżeli nie została skonstruowana do celów takiej komunikacji.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Komunikacja pomiędzy programami

Nowy postprzez polymorphism » sobota, 11 września 2010, 16:15

Twoje słowa: (...)
przeciwko moim: (...)

Nie rozumiem, czemu to przeciwstawienie ma służyć?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 10 gości

cron