Zwischen Processen Kommunizieren



  • Wo oder wie finde ich eine Doku für Ipc in WinAPI?

    Bei MSDN: http://www.msdn.com

    Die Visual C++ IDE bietet auch die möglichkeit mit Win32-Projekt und keinem vorkompilierten Header in reinem C zu Schreiben und dieser Compiler übersetzt es auch.

    Schön - nur hat das nichts, aber auch gar nichts mir deinem Problem zu tun.

    Oder ist das weniger geignet um in C zu schreiben? Gegebenenfalss wegen dem Compiler?

    Der C - Compiler von Visual Studio ist eher dürftig.
    Jedoch: Warum in aller Welt möchtest Du auf einmal C benutzen?

    Entscheide dich für C oder C++ (wobei da die C API's des OS benutzt werden) oder für .NET (am besten C# und nicht C++/CLI, wie schon vorher mal erwähnt).

    Simon



  • Das erste mal wo ich ins Programmieren eingestiegen bin da habe ich mit QBasic begonnen wobei dass für MS-DOS ist und ich daher schnell an die Grenzen gestosen bin, ebenso mit QuickBasic. Aber dadurch habe ich Visual Studio Basic (Visual Basic) endeckt und da war die Syntax ziemlich wie QBasic. Nur mit der Zeit merkte ich dann den entscheidenen Punkt: VB ist langsam! Gleiches erzählt man mir bei Visual C#. Daher wolte ich auf Visual C++ umsteigen. Dazu habe ich von vorne angefangen und Reines C gelernt, dazu habe ich ein prima OpenBook im web gefunden.

    Wie dem auch sei dass mit OpenGL war mir dann doch zu anstregend und von der WinAPI wuste ich so noch nichts bzw. habe ich mir dummerweise nicht angeschaut. Aber jetzt habe ich es und ich denke vielleicht solte ich dass doch mal lieber machen als Objektorientiert mit .Net. Denn wenn bei .Net so viele Probleme auftretten. Auserdem wil ich ja gerade diese C/C++ Spezialitäten nutzen, das eben nicht gereade alles Mangament ist.

    Dass andere ist duch Visual Studio habe ich keine Ahnung von Make files oder Compilier anweisungen, z.B. die, die per Übergabeparameter am Aufruf des Compiliers angehängt werden.

    Also was ich suche ist wirklich die Beispiele wie ich WinAPI in Reinem C/C++ anspreche. Auf msdn bekomme ich immer für cli C++/C+/VB/...



  • Ich fasse zuammen:
    Du willst (aus obskuren Gründen) Programme mit nativem C++ schreiben und dabei die WinAPI benutzen.

    Hier findest Du den Einstieg in die WinAPI Doku:
    http://msdn.microsoft.com/en-us/library/aa139672.aspx

    Und hier ein Bsp. einer Seite, welche die Funktion WSASocket(..) dokumentiert:
    http://msdn.microsoft.com/en-us/library/ms742212(VS.85).aspx

    Simon



  • LiGERWooD schrieb:

    C/C++

    C und C++ sind zwei eigenständige Dinge. Nur weil ein Teil von C eine Teilmenge von C++ ist, muss man nicht immer C/C++ sagen.

    Der Grund, Visual C# sei langsam, ist auch kein wirklicher.



  • mad_martin schrieb:

    LiGERWooD schrieb:

    C/C++

    C und C++ sind zwei eigenständige Dinge. Nur weil ein Teil von C eine Teilmenge von C++ ist, muss man nicht immer C/C++ sagen.

    Der Grund, Visual C# sei langsam, ist auch kein wirklicher.

    Schön. Aber was ergibt das für einen sinn wegen solchen Problemen die Sprache zu wechseln? Jetzt kann ich C. Und dann noch mal C# zu lernen um dan wieder ins Visual ab zu tauchen nur um die gleichen Probleme noch mal zu bekommen - nein Danke! Es ist ja dann nämlich immer noch .Net und da ist ja die Quelle meines Problems. Und ich glaube das ich auch deshalb mit solchen fehlern nicht klar komme weil, weil ich an sich nicht die ganze Funktion kenne die hinter den Klassen der Ipc steckt, geschweige denn .Net



  • LiGERWooD schrieb:

    Schön. Aber was ergibt das für einen sinn wegen solchen Problemen die Sprache zu wechseln? Jetzt kann ich C. ...

    Für den Einsatz der WinApi reicht C völlig aus. Obwohl man natürlich schnell auch die Vorteile von C++ nutzen möchte. Sage mal konkret, was in welchem Umfang Du kommunizieren möchtest. Für einfache Dinge (integer oder kleine Byte-Folgen) ist SendMessage ausreichend und sehr effektiv. Für mehr FileSharing oder Sockets. Aber das wurde Dir schon gesagt.
    Wer programmiert, sollte auch wissen wo er die Dokus findet. Bei mir liefert die der Compiler (Borland).



  • berniebutt schrieb:

    LiGERWooD schrieb:

    Schön. Aber was ergibt das für einen sinn wegen solchen Problemen die Sprache zu wechseln? Jetzt kann ich C. ...

    Für den Einsatz der WinApi reicht C völlig aus. Obwohl man natürlich schnell auch die Vorteile von C++ nutzen möchte. Sage mal konkret, was in welchem Umfang Du kommunizieren möchtest. Für einfache Dinge (integer oder kleine Byte-Folgen) ist SendMessage ausreichend und sehr effektiv. Für mehr FileSharing oder Sockets. Aber das wurde Dir schon gesagt.
    Wer programmiert, sollte auch wissen wo er die Dokus findet. Bei mir liefert die der Compiler (Borland).

    Danke. Ich wil wirklich nur einen char array der eine größe von bis zu 256 Zeichen(1. Byte) (char[255]) einem anderen Process übergeben.

    Das mit der Doku, ich hatte ja den Visual Studio und das ja msdn und da ist dass für cli und die objekte kommen auserdem aus .Net

    Gut also SendMessage ist in WinAPI enthalten?



  • Das mit der Doku, ich hatte ja den Visual Studio und das ja msdn und da ist dass für cli und die objekte kommen auserdem aus .Net

    Ja, weil die .NET Doku auch gleich dabei ist. Ist aber nicht so schlimm, oder?

    Gut also SendMessage ist in WinAPI enthalten?

    Google doch einfach nach "MSDN SendMessage" (ohne Anführungszeichen), dann wirst Du sehr schnell eine Antwort auf diese Frage bekommen.

    Ausserdem möchte ich mal anmerken, dass deine Sätze sehr schwer zu lesen sind und Du dir ruhig ein wenig mehr Mühe geben könntest.

    Simon



  • Also gut!
    - Für einmalig 256 Bytes eignet sich SendMessage gut
    - SendMessage ist eine WinApi-Funktion
    - Die Syntax ist: SendMessage(HWND,MSG,WPARAM,LPARAM) mit
    HWND = Fenster des Zielprozesses
    MSG = benutzerdefinierte Nachricht
    WPARAM = Unterscheidung, was gesendet ist
    LPARAM = Jedes einzelne Character-Byte
    Versuche in Deinem Fall möglichst diesen Weg. Die Character-Bytes kommen zielgenau an und brauchen dann nur noch mit. z.B. SetDlgItemText als zuvor zusammengestellter String eingesetzt zu werden. Alle anderen Wege verlangen meist eine Synchronisation der Schreib- und Lesezugriffe. Wenn Du willst, kannst Du alternativ eine simple Datei anlegen. Der eine Prozess schreibt die Datei, der andere liest sie.
    Mache es einfach, auch mit wenig Erfahrung kriegt man das sauber hin! Du hast ja gesagt "C kann ich schon". 🙄


  • Mod

    Einfach WM_COPYDATA verwenden. Dann benötigt man nicht mehrere Nachrichten.



  • Sorry,

    kann das sein, dass wir uns missverstanden haben? Weil zum Zielfenster? Ich meine halt, dass ich wirklich von einem gestarteten Process (.exe) etwas an einen andereren gestarteten Process (.exe) schicken möchte. Also nicht von einem Fenster zum anderen Fenster, was aus dem selben Process gestartet wurde.



  • LiGERWooD schrieb:

    Sorry,

    kann das sein, dass wir uns missverstanden haben? Weil zum Zielfenster? Ich meine halt, dass ich wirklich von einem gestarteten Process (.exe) etwas an einen andereren gestarteten Process (.exe) schicken möchte. Also nicht von einem Fenster zum anderen Fenster, was aus dem selben Process gestartet wurde.

    Ey, lies doch endlich einfach die Doku. WM_COPYDATA funktioniert über Prozessgrenzen hinweg!
    Simon



  • theta schrieb:

    LiGERWooD schrieb:

    Sorry,

    kann das sein, dass wir uns missverstanden haben? Weil zum Zielfenster? Ich meine halt, dass ich wirklich von einem gestarteten Process (.exe) etwas an einen andereren gestarteten Process (.exe) schicken möchte. Also nicht von einem Fenster zum anderen Fenster, was aus dem selben Process gestartet wurde.

    Ey, lies doch endlich einfach die Doku. WM_COPYDATA funktioniert über Prozessgrenzen hinweg!
    Simon

    Er kann vielleicht nicht lesen? Soll ja mal vorkommen!



  • berniebutt schrieb:

    theta schrieb:

    LiGERWooD schrieb:

    Sorry,

    kann das sein, dass wir uns missverstanden haben? Weil zum Zielfenster? Ich meine halt, dass ich wirklich von einem gestarteten Process (.exe) etwas an einen andereren gestarteten Process (.exe) schicken möchte. Also nicht von einem Fenster zum anderen Fenster, was aus dem selben Process gestartet wurde.

    Ey, lies doch endlich einfach die Doku. WM_COPYDATA funktioniert über Prozessgrenzen hinweg!
    Simon

    Er kann vielleicht nicht lesen? Soll ja mal vorkommen!

    Ich habe kein interesse dadran mit dir aus zu gehen!



  • Ob Du mit mir ausgehen möchte, ist mir egal.
    Du hattest eine Frage gestellt. Die wurde hinreichend und ausreichend von allen hier beantwortet! Windows ist es egal, ob ein im System verfügbares Fenster im selben Prozess liegt oder in einem anderen.
    daddeldu - ich habe fertig
    hattu doku, mutte lesen!



  • berniebutt schrieb:

    Ob Du mit mir ausgehen möchte, ist mir egal.
    Du hattest eine Frage gestellt. Die wurde hinreichend und ausreichend von allen hier beantwortet! Windows ist es egal, ob ein im System verfügbares Fenster im selben Prozess liegt oder in einem anderen.
    daddeldu - ich habe fertig
    hattu doku, mutte lesen!

    Was hinteressiert mich das?! Dann rollen Köpfe, notfalls mit Messer und Kabel, dann wird Merkel einfach nur noch ausgeflogen und verpisst sich.


Anmelden zum Antworten