WinFuture-Forum.de: [c++] Eigene Funktiom Erstellen ... - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[c++] Eigene Funktiom Erstellen ... Wie? Bin Anfänger ...


#1 Mitglied ist offline   K050V4 

  • Gruppe: aktive Mitglieder
  • Beiträge: 787
  • Beigetreten: 13. August 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Stuttgart
  • Interessen:(X)HTML<br />CSS2+<br />PHP 4/5<br />MySQL 5<br />Symfony 1.2+<br />JavaScript / AJAX<br />jQuery<br />C++<br />C#<br />Java<br />...

geschrieben 12. Juli 2007 - 14:21

Hallo liebe User :blush:

Ich habe jetzt nach einer Stunde 'herum'-experimentieren endlich heraus gefunden wie ich einen Wert aus der Registry auslesen kann. Nun möchte ich nicht die Codezeilen jedes mal neu schreiben/kopieren sondern innerhalb meines Programmes eine eigene Funktion erstellen ...

Hier erstmal der Code:
	char Zeige[99] = {""};
	unsigned long size = sizeof(Zeige);
	HKEY hKey;
	long error;

	error = RegOpenKey(HKEY_CURRENT_USER, "Environment", &hKey);

	if (error == 0) {
	  RegQueryValueEx(hKey, "TEMP", NULL, NULL, Zeige, &size);
	  RegCloseKey(hKey);
	}


In Php würde ich es so machen ...
function leseReg($$H-SCHLÜSSEL$$, $$SCHLÜSSEL$$, $$WERT$$) {

	char Zeige[99] = {""};
	unsigned long size = sizeof(Zeige);
	HKEY hKey;
	long error;

	error = RegOpenKey($$H-SCHLÜSSEL$$, $$SCHLÜSSEL$$, &hKey);

	if (error == 0) {
	  RegQueryValueEx(hKey, $$WERT$$, NULL, NULL, Zeige, &size);
	  RegCloseKey(hKey);
	}

   return Zeige;
}

$Wert = leseReg("HKEY_CURRENT_USER", "Environment", "TEMP");


Macht man es in C++ so ähnlich? Würde mir bitte jemand ein kleines Beispiel zur veranschaulichung zeigen?

Danke im voraus! ;)

Zitat

"In der Welt des Erkennbaren ist die Idee des Guten die höchste." - Platon

Spritify! Easy CSS-Sprite-Generator | Albanisch Deutsch Wörterbuch
0

Anzeige



#2 _Fenix_

  • Gruppe: Gäste

geschrieben 12. Juli 2007 - 14:45

Ich bin mit Windows Programmierung nicht so firm und es mag an deiner Frage vorbei sein... aber bitte programmier sowas hier nicht:
char Zeige[99] = {""};
unsigned long size = sizeof(Zeige);
...
   RegQueryValueEx(hKey, "TEMP", NULL, NULL, Zeige, &size);

Zeichenketten mit fester Länge sind, insofern man nicht genau weiß, dass sie exakt 99 Zeichen haben, zu vermeiden. Noch mehr zu vermeiden ist in C/C++ eine Arraylänge mit sizeof() abzufragen.
So braucht nur ein Schlüssel >99 Zeichen lang sein und du hast schon nen Bufferoverflow, den man für die bösartigsten Dinge ausnutzen kann. Hinzu kommt, dass sizeof teilweise undefinierte rückgaben bei Arrays hat.

Dieser Beitrag wurde von Fenix bearbeitet: 12. Juli 2007 - 14:47

0

#3 Mitglied ist offline   Lofote 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.522
  • Beigetreten: 24. August 04
  • Reputation: 1

geschrieben 12. Juli 2007 - 17:45

Zitat

Macht man es in C++ so ähnlich?

Klar geht das, so kann z.B. ne Funktion aussehen:
CString int2string(int number)
{
CString _temp;
_temp.Format("%i",number);
return _temp;
}


Zitat

So braucht nur ein Schlüssel >99 Zeichen lang sein und du hast schon nen Bufferoverflow

Falsch. Der zurückgegebene Wert (nicht Schlüssel) kann nicht >99 Zeichen lang sein. RegQueryValueEx fordert im letzten Parameter die Größe des Puffers.

Dieser Beitrag wurde von Lofote bearbeitet: 12. Juli 2007 - 17:46

0

#4 Mitglied ist offline   K050V4 

  • Gruppe: aktive Mitglieder
  • Beiträge: 787
  • Beigetreten: 13. August 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Stuttgart
  • Interessen:(X)HTML<br />CSS2+<br />PHP 4/5<br />MySQL 5<br />Symfony 1.2+<br />JavaScript / AJAX<br />jQuery<br />C++<br />C#<br />Java<br />...

geschrieben 13. Juli 2007 - 09:49

Erstmal Dankeschön für eure Antworten <_<
Meine Funktion sieht jetzt so aus:

  str readREG();
  {
	char temp[99] = {""};
	unsigned long size = sizeof(temp);
	HKEY hKey;
	long error;

	error = RegOpenKey(HKEY_CURRENT_USER, "Environment", &hKey);

	if (error == 0) {
	  RegQueryValueEx(hKey, "TEMP", NULL, NULL, temp, &size);
	  RegCloseKey(hKey);
	} else {
	  ShowMessage("Fehler beim Lesen aus der Registry.");
	}

	return temp;
  }


aber ich bekomm die Fehlermeldung: Call to undefined function 'readREG' ...
was hab ich fasch gemacht?

Dieser Beitrag wurde von K050V4 bearbeitet: 13. Juli 2007 - 09:51

Zitat

"In der Welt des Erkennbaren ist die Idee des Guten die höchste." - Platon

Spritify! Easy CSS-Sprite-Generator | Albanisch Deutsch Wörterbuch
0

#5 Mitglied ist offline   sparkle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.316
  • Beigetreten: 30. Mai 05
  • Reputation: 0

geschrieben 13. Juli 2007 - 10:53

Du hast nen Semikolon hinter dem Kopf der Funktion. Ich kenne mich mit C++ nicht aus aber ich denke dadurch wird es wie ein Funktionsaufruf gehandhabt, welcher natürlich ins leere läuft.
Dieser sparkle hat Super-Kuh-Kräfte
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0