Eisenhorn Geschrieben 5. Oktober 2009 Geschrieben 5. Oktober 2009 Hallo Zuerst einmal ich bin Anfänger und weiß auch nciht ob ich im richtigen Forum bin. Also für ein Schulprojekt muss ich eine Globalvariable aus lesen mit c++. Natürlich habe ich es schon mit GetEnvoirmentVariable versucht , und auch mit der Kurzform. Das Funktioniert so weit auch, aber das ganze muss laufend Eingelesen werden. Ich habe nun das problem das wenn ich das Kompelierte Programm starte wird der richtige Wert eingelesen , danach aber nicht mehr verändert wird. Wenn ich morgen in der Schule bin kann ich noch den Qullecode posten. Ich hoffe es wurde klar was ich meine. Über antworten würde ich mich Freuen. Zitieren
Pointerman Geschrieben 5. Oktober 2009 Geschrieben 5. Oktober 2009 Moin! Was Du suchst ist eine Umgebungsvariable und keine globale Variable. Umgebungsvariablen kannst Du mit getenv aus der stdlib einlesen. Siehe hier: getenv - C++ Reference Zitieren
Eisenhorn Geschrieben 5. Oktober 2009 Autor Geschrieben 5. Oktober 2009 Arrg Anfänger fehler:rolleyes: aber Danke für die schnelle Antwort. Mit getenv habe ich es auch schon probiert (mir war nur der befehl entfallen) Das ist ja relativ leicht Raus zufinden. Das Problem ist nur das sich dort bei mir der Wert auch bei mehrmaligen einlesen nicht ändert nach dem Programm start, auch wenn sich die Umgebungsvariable ändert. Ich muss über diesen Weg laufend Daten eines Sensor einlesen. Zitieren
Eisenhorn Geschrieben 6. Oktober 2009 Autor Geschrieben 6. Oktober 2009 Ja wie versprochen der Quellcode: #include <iostream> #include <fstream> #include <istream> #include <cstdlib> #include <stdio.h> #include <windows.h> #include <conio.h> using namespace std; int main () { ofstream outDatei ("c:\\Dokumente und Einstellungen\\Administrator\\Desktop\\Herbstakademi 2009\\schreiben\\in.dat"); char winkel[256]="34.3"; GetEnvironmentVariable("winkel", winkel, 255); cout << "Winkel in Zentigrad = " << winkel << ".\n"; //cin >> winkle; outDatei << winkel << endl; return 0; } Wenn ich das ganze in der Schleife Ausgebe wird immer der Gleiche wert ausgegeben auch wenn sich die systemvariable verändert hat. Zitieren
Klotzkopp Geschrieben 6. Oktober 2009 Geschrieben 6. Oktober 2009 Welcher Wert wird denn ausgegeben? Hoffentlich nicht 34.3. Wer setzt denn diese Umgebungsvariable? Und prüf bitte mal den Rückgabewert von GetEnvironmentVariable. Zitieren
Eisenhorn Geschrieben 6. Oktober 2009 Autor Geschrieben 6. Oktober 2009 Nein Nein das wird schon überschrieben. DerDie variable setzt ein anderes Programm, das einen Sensor ausliest.(Ich weiß sehr aufwendig hat aber einen anderen Hintergrund) Meinten sie den Rüchgabe wert des Programms? Der ist -1073741510 Zitieren
Klotzkopp Geschrieben 6. Oktober 2009 Geschrieben 6. Oktober 2009 Meinten sie den Rüchgabe wert des Programms? Nein, den vom Funktionsaufruf von GetEnvironmentVariable. Zitieren
Eisenhorn Geschrieben 6. Oktober 2009 Autor Geschrieben 6. Oktober 2009 Der ändert sich bei jeden Start des Programmes, wie er es soll, aber im lauf des Programms ändert sich der Rückgabe wert nicht Zitieren
Klotzkopp Geschrieben 6. Oktober 2009 Geschrieben 6. Oktober 2009 Der ändert sich bei jeden Start des Programmes, wie er es soll, aber im lauf des Programms ändert sich der Rückgabe wert nichtDer Rückgabewert, nicht der Wert der Umgebungsvariablen. GetEnvironmentVariable gibt ein DWORD zurück. Aber daran liegt es anscheinend sowieso nicht. Ich vermute einfach mal, dass der Mechanismus für das Setzen der Umgebungsvariablen sich nicht auf dein Programm auswirkt. Jeder Prozess hat nämlich seinen eigenen Satz an Umgebungsvariablen. Dein Programm bekommt beim Start eine Kopie, und danach ändert sich nichts mehr. Wie genau setzt denn dieses "andere Programm" die Variable? Zitieren
Eisenhorn Geschrieben 6. Oktober 2009 Autor Geschrieben 6. Oktober 2009 :upps:upps Das weiß ich nicht. Das Programm habe wir von der Firma des Sensors bekommen da sie noch keine c++ unterstützung hatten. Zitieren
Klotzkopp Geschrieben 6. Oktober 2009 Geschrieben 6. Oktober 2009 Du hast aber doch hoffentlich den Aufruf von GetEnvironmentVariable in die Schleife gesetzt, und nicht nur die Ausgabe, oder? Zitieren
Eisenhorn Geschrieben 6. Oktober 2009 Autor Geschrieben 6. Oktober 2009 Ja habe ich natürlich, habe auch schonn einfch 5 mal hintereinander GetEnvironmentVariable mit jeweils einer Ausgabe probiert. Zitieren
TDM Geschrieben 6. Oktober 2009 Geschrieben 6. Oktober 2009 Du hast aber doch hoffentlich den Aufruf von GetEnvironmentVariable in die Schleife gesetzt, und nicht nur die Ausgabe, oder? Welche Schleife? Zitieren
Eisenhorn Geschrieben 6. Oktober 2009 Autor Geschrieben 6. Oktober 2009 Das Problem trat aucg in einer Schleife auf Zitieren
flashpixx Geschrieben 7. Oktober 2009 Geschrieben 7. Oktober 2009 Jeder Prozess hat nämlich seinen eigenen Satz an Umgebungsvariablen. Dein Programm bekommt beim Start eine Kopie, und danach ändert sich nichts mehr. Ich ergänze hierzu einmal: Umgebungsvariable ? Wikipedia Es ist üblich, dass die Menge der Umgebungsvariablen pro System-Prozess gespeichert werden. Änderungen, die ein Prozess am Bestand der Variablen vornimmt, sind nur für ihn selbst und für Prozesse, die von ihm gestartet wurden (Child-Prozesse), gültig. Du wirst, so lange das Programm läuft immer wieder den gleichen Wert auslesen und niemals einen neu gesetzten Wert bekommen. Stell Dir das wie eine "Sandbox" vor, in der wenn Du das Programm startet alles "statisch" ist. Du wirst wohl nicht drumherum kommen, eine entsprechende Library in Dein Programm aufzunehmen, das direkt mit dem Sensor kommuniziert. Ich weiß jetzt nicht, wie der Sensor an das System angeschlossen ist, aber z.B: via USB kann man sich recht leicht an die Events anhängen, wie die technischen Daten des Sensors zu verarbeiten sind, müsstest Du dann beim Hersteller erfragen bzw findest Du in TechPapers Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.