Kommunikation zweier Programme



  • hi,
    ich möchte, dass zwei programme untereinander kommunizieren, also dass z.b. ein AnsiString irgendwie vom einen ins andere übergeben wird. das Problem is, dass ich in diesem fall keine dll verwenden kann. es gäbe natürlich die möglichkeit mit einer datei zu arbeiten, nur möchte ich nich den rechner ausbremsen, indem ich dauerd auf die festplatte zugreife. gibt es da eine möglichkeit?`

    danke schon mal



  • Hallo

    sieh ins WinAPI-Forum unter Begriffen wie Shared Memory nach.

    bis bald
    akari



  • danke, nur wenn ich danach suche finde ich nix 🙄
    weiß auch nich warum...



  • Wenn die beiden Programme auch auf unterschiedlichen Rechnern laufen sollen,
    dann würd ich TIdTCPClient und TIdTCPServer verwenden. Ist in der Handhabung
    denkbar einfach. Ich verwende das z.B. wenn zwei oder mehrere Programme auf
    ein Gerät zugreifen müssen welches am COM Port hängt.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        IdTCPServer1->DefaultPort = 8888;
        IdTCPServer1->Active = true;
    
        IdTCPClient1->Port = 8888;
        IdTCPClient1->Host = "loopback";
        IdTCPClient1->Connect();
    
        IdTCPClient1->WriteLn("PING");
        AnsiString sAnswer = IdTCPClient1->ReadLn();
        ShowMessage(sAnswer);
    
        IdTCPClient1->Disconnect();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::IdTCPServer1Execute(TIdPeerThread *AThread)
    {
        if (AThread->Connection->Connected()) {
            AnsiString sCmd = AThread->Connection->ReadLn();
            if (sCmd == "PING") {
                AThread->Connection->WriteLn("PONG");
            }
        }
    }
    


  • die beiden programme sollen aber gleichzeitig auf einem rechner laufen...



  • ist damit ja auch kein Problem. Einfach IdTCPServer1 in das eine Programm
    und IdTCPClient1 in das andere.

    Schau dir das Beispiel an: CBuilder6\Examples\Indy\BasicClientServer



  • Hallo

    also ich weiß nicht wo die Beiträge zum Shared Memory sind... seltsam.
    Wenn die Datenmenge klein ist, kannst du auch die Registry nehmen. Erstell einen gemeinsamen Schlüssel für deine Programme, und tausch darüber Werte aus.

    bis bald
    akari



  • OK, danke. Ich werde alles mal durchprobieren 🙂



  • Ich hab sowas gemacht:

    .
       .
       COPYDATASTRUCT cds;
       char ParamCh[256];
       ShowWindow(hWnd,SW_SHOWNORMAL);
       SetForegroundWindow(hWnd);
       for (int i=1;i<=ParamCount();i++)
       {
          strncpy(ParamCh, ParamStr(i).c_str(),sizeof(ParamCh));
          cds.cbData=strlen(ParamCh)+1;
          cds.lpData=ParamCh;
          SendMessage(hWnd,WM_COPYDATA,0,(LPARAM)&cds);
       }
       .
       .
    

    Das steht in main() !
    In hWnd ist das Handle einer vorherigen Instanz !
    Die wird in Fordergrung geholt.
    mit WM_COPYDATA schick ich alle Parameter an die erste Instanz!

    Es muss auch ein Handler dafuer geschrieben werden!!!



  • danke. werdes gleich ma testen


Log in to reply