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 ausWenn 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 1Anscheinend 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
volatileda 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 ausDas 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.htmlNochmal 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