API Calls funktionieren nicht anständig...
-
Fehler:
'std' : is not a class or namespace nameegal ob std::string (...) oder using namespace std;
-
1. normalerweise brauchst du winreg.h nicht includen, das macht windows.h
2. wenn mehrer User auf deinem System sind oder XP, kannst du diese Funktion nicht benutzen mit HKEY_CURRENT_USER, nimm dann RegOpenCurrentUser();
3. Besser wäre RegCreateKeyEx() zu benutzen.
4. #include <string> ... std::string abc; sollte problemlos funktionieren, wenn nicht, liegt tatsächlich irgendwo ein Problem, muß aber nicht unbediengt bedeuten das die Header defeckt sind. Vieleicht bringt es was stdio mit zu includen. Oft kann es auch eine falsche Compiler einstellung sein (C Projekt).
-
Danke, dass ihr mir geholfen habt! Ich war am verzweifeln.


-
DjFishbone schrieb:
zum Beispiel
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { if(!(GetModuleHandle("advapi32.dll"))) MessageBox(0, "Modul nicht gefunden", "Fehler", 0); }wenn ich den addressof Operator (&) nehme:
cannot convert parameter 3 from 'struct HKEY__ *** ' to 'struct HKEY__ ** '
kann mir auch net vorstellen, dass PHKEY nicht schon passend definiert ist.
Auf einem anderen PC taucht der Fehler auch auf.
Kanns vielleicht sein, dass meine Headerdateien kaputt sind, Das Stringobjekt scheitert schon bei der Erstellung (string NeuerString), auch wenn <string> oder <string.h> #ingecludet sind
Danke dass du mir geantwortet hast 
sagt keiner das PHKEY irgendwie nicht passend definiert ist ^^
PHKEY ist so definiert:typedef HKEY *PHKEY;ich hab auch nicht gesagt, du sollst die Adresse eines Objekts vom Typ PHKEY übergeben, sondern die eines vom Typ HKEY, die Adresse ist dann vom Typ PHKEY und alles passt, funktioniert übrigens auch (jedenfalls bei mir)
du hättest nur meinen Code komplett kopieren müssen :p
MfG
DDR-RAMP.S.:
RegCreateKey oder RegCreateKeyEx in diesem Fall besser ist, kommentiere ich nicht
-
den Buchstaben hab ich überlesen. Aber wieso funktioniert PHKEY nicht, wenn es extra für die Verwendung deklariert worden ist?
-
PHKEY ist ein Pointer zu der Struct HKEY (**HKEY)
-
MichaM. schrieb:
PHKEY ist ein Pointer zu der Struct HKEY (**HKEY)
das problem hatte heute schon mal wer mit diesen blöden microsoft typedefs, die irgendwie an ungarische notation angelehnt sind. HKEY hkey, &hkey sind von der schreibweise doch viel lesbarer als PHKEY
-
net schrieb:
MichaM. schrieb:
PHKEY ist ein Pointer zu der Struct HKEY (**HKEY)
das problem hatte heute schon mal wer mit diesen blöden microsoft typedefs, die irgendwie an ungarische notation angelehnt sind. HKEY hkey, &hkey sind von der schreibweise doch viel lesbarer als PHKEY
teilweise Geschmackssache

Ich finde es so ok, wie es MS gemacht hat.struct HKEY__ { int unused; }; typedef HKEY__ *HKEY; typedef HKEY *PHKEY;bzw.
typedef void* PVOID; typedef PVOID HANDLE; typedef HANDLE HKEY; typedef HKEY *PHKEY;Um es nochmal ganz undeutlich zu sagen.
(Entnommen aus windef.h)MfG
DDR-RAM
-
DDR-RAM schrieb:
teilweise Geschmackssache

Ich finde es so ok, wie es MS gemacht hat.struct HKEY__ { int unused; }; typedef HKEY__ *HKEY; typedef HKEY *PHKEY;die ersten beiden zeilen sind nicht verkehrt. hier lässt sich m$ die möglichkeit offen HKEY__ zu erweitern (der user soll ja mit HKEY arbeiten, was ein pointer auf HKEY__ ist). aber dieses typedef von * in P ist blöd und trägt nur zur verwirrung bei
-
aber dieses typedef von * in P ist blöd und trägt nur zur verwirrung bei
Also mal zum Mitschreiben, bevor hier jemand verwirrtes lernt.
HKEY ist das Handle eines Keys und PHKEY ist die Adresse zu einem HKEY Handle.LONG RegCreateKey( HKEY hKey, // Handle eines Keys LPCTSTR lpSubKey, // Name des Unterschlüssels zum öffnen/generieren PHKEY phkResult // Adresse des Buffers für das Handle );Man sollte eigentlich schon erkannt haben, in welcher Form Onkel Billy seine Typedefs gestaltet HKEY -> H KEY -> Handle Key, PHKEY -> P H KEY -> Pointer Handle KEY.
Was sagt euch dabei jetzt LPCSTR? L P C Str, könnt ihr deuten, oder?
Diese Form der Namensgebung hat seinen Ursprung aus den Win3.11 Zeiten, und ist zur Erleichterung, wenn man das Schema kennt, kann man Code besser Lesen, man erkennt an PHKEY ehr das es ein Pointer ist (durch das P) als durch ein im Code irgendwo hinten in einer Funktion ein & steht vor HKEY.
Sicher schreibt keiner (aus Faulheit?):HKEY hkey; PHKEY = &hkey; RegCre.....würde aber Übersichtlicher sein und man hätte immer den Type und mit seiner Adresse zur Hand.
Schaut euch mal einige Typen an! H - Handle, P - Pointer, STR - String, C - Char, WND - Window, PARAM - Parameter, etc.
Alles nur Abkürzungen.
-
Aber ich find's doof, dass Microsoft selbst meistens ihre tollen Codevereinbarungen nicht einhalten, z.B. Befehle die mit _ angehen oder z.B. WM_QUIT, obwohl sie selber predigen den Unterstrich zu vermeiden. Und wieso muss eine Microsoft-eigene Funktionsparameter immer eigene Typen haben (WPARAM wParam, LPARAM lParam, HKEY hKey, HINSTANCE hInstance, ...) das hat mich besonders verwirrt als ich mit C++ anfing, und es nervt mich immer noch...
