2 verschiedene Programme sollen mithilfe von Zeigern die selben variablen nutzen



  • Hallo, ich bin gerade erst von QuickBasic nach C++ umgestiegen 😃

    Besonders die Zeiger haben mich recht fasziniert, und da hat sich doch gleich eine Idee
    breitgemacht:

    Man hat 2 unabhängig voneinander entwickelte Programme:
    Prgm1:
    - stellt eine Zahlenvariable "Zahl" bereit
    - erstellt einen Zeiger, der auf diese Variable zeigt
    - der Inhalt dieses Zeigers (also die Nummer der Speicherzelle der Variable "Zahl")
    wird in eine *.txt - Datei geschrieben
    - dann wird in einer Schleife folgendes gemacht:
    inhalt für Zahl vom Benutzer abfragen (also z.B. 55)

    Prgm2:
    - öffnet die *.txt - Datei
    - erstellt einen Zeiger, der auf die Variable "Zahl" zeigt
    (dafür auch die *.txt - Datei, da steht ja die Nummer der Speicherzelle drin)
    - eine Schleife:
    - list den Inhalt der Variable auf die der Zeiger zeigt (also quasi die Variable
    "Zahl")
    - gibt den Inhalt auf dem Bildschirm aus

    Wenn man also in Prgm1 eine Zahl eingibt sollte sie in Prgm2 erscheinen...

    Ich habe das ganze schon mal ausprobiert (anstatt der *.txt - Datei muss man den Zeiger selbst eingeben), aber C meckert:
    (also Prgm1 funktioniert, Prgm2 ist fehlerhaft)

    C:\Dev-Cpp\projects\zeigerprgm\codeb.c++ In function int main()': 14 C:\\Dev-Cpp\\projects\\zeigerprgm\\codeb.c++ invalid conversion from \int' to `int*'
    C:\Dev-Cpp\projects\zeigerprgm\Makefile.win [Build Error] [codeb.o] Error 1

    Anscheinend will er den Zeiger nicht manuell beschriften lassen 😞
    Aber was kann man dagegen machen?? (falls ich mit meiner Interpretation überhaupt richtig liege)

    Hier noch die Codes: (verbessert mich ruhig falls ein Fehler drin ist oder sagt was man besser machen kann, bin ja erst C-Anfänger und kann noch viieel lernen 😃 )

    Prgm1:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    int main()
    {
        int zahl=100;
        int *zahlzeiger;
        zahlzeiger=0;
        while(true)
        {         
                   cout << "geben sie eine zahl ein:\n";
                   cin >> zahl;
                   zahlzeiger=&zahl;
                   cout << "zahl: ";
                   cout << zahl;
                   cout << "\nzeiger:" << zahlzeiger;
                   cout << "\n\n";
        }
    
    }
    

    Prgm2:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    int main()
    {
        int *zahlzeiger;
        int zahlzeigerwert=0;
        zahlzeiger=0;
        while(true)
        {         
                   cout << "geben sie den zeiger ein:";
                   cin >> zahlzeigerwert;
                   zahlzeiger=zahlzeigerwert;     //ein Versuch das Problem zu lösen ;-)
        while(true)
                   {
                                  cout << "zahlzeiger: " << zahlzeiger << "\n";
                                  cout << "inhalt: " << *zahlzeiger << "\n\n";
                   }
        }
    
    }
    

    hab schon gesucht ("Zeiger manuell eingeben" und solche Sachen) aber leider nichts gefunden

    falls ihr noch wissen wollt für was das Ganze ist:
    FreeBasic (ist ja fast das gleiche wie QuickBasic) übernimmt den Grafischen Teil
    und C++ den rechnerisch sehr aufwändigen Teil eines Programms...
    Allerdings weis ich noch nicht ob FreeBasic was mit Zeigern am Hut hat 😞
    Aber das mit den gemeinsahmen Variablen würde mich natürlich trotzdem brennend interessieren 😃

    mfg
    -schumi-



  • Nennt sich shared memory o. Interprozess-Kommunikation. So einfach, wie du das da vorgibst, ist das alles nicht. Für gewöhnlich kann man auf protected-mode-Maschinen ja nicht in Speicherbereiche anderer Programme zugreifen (Memory Access Violation). Ich weiß nicht so genau, ob der Klassifizierer volatile da helfen könnte. Anyway, die Adresse des Speicherbereichs kannst du per Zwischenspeicher u. den Programmen rumreichen. Das ist aber alles plattformabhängig und verlässt den Wirkungsbereich von ISO-C++.



  • ich glaub normalerweise passiert da ein speicherzugriffsfehler und es stürtzt ab...



  • Zu deinem Problem:
    Du musst die Referenz an deinen Zeiger übergeben.

    Ansonsten:
    -Initialisiere deine Variablen mit 0
    -Initialisiere Zeiger mit NULL
    -Die while-Schleife sieht irgendwie gaga aus

    Das was du vor hast, sollte doch eigentlich vom Prinzip her schon mal funktionieren. Geht es dir denn nun darum den Wert aus dem angeforderten Speicher des Programmes auszulesen oder darum, den Wert über eine Textdatei zu sharen?

    Zum letzteren: Siehe Aktenordners Vorschlag, Interprozesskommunikationsmöglichkeiten zu nutzen. Falls dich diese Methode, welche eindeutig die bessere und sichere ist, interessiert, kannst du ja mal meine Anderen Posts durchlesen und dir ein paar Artikel dazu reinziehen.



  • Vielen Dank für die Hilfe!! 😃

    Nach dem ich jetz wusste, wie das ganze heißt, hab ich auch in eurem Forum einen Link zu einer Seite gefunden, wo das ganze beschrieben wird:

    http://www.highscore.de/cpp/boost/index.html
    

    Nochmal vielen Dank!

    mfg
    -schumi-



  • Naja, man kann unter Windows DLLs verwenden um genau das zu machen. Geht eigentlich relativ einfach. Man muss nur eine "shared" Sektion deklarieren, und dann dafür sorgen dass die Variablen die man sharen will (und natürlich nur die) auch in dieser Sektion landen.

    näheres hier: http://msdn.microsoft.com/en-us/library/h90dkhs0(VS.80).aspx


Anmelden zum Antworten