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