Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit Konvertierungen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.12.2007, 13:12 Uhr
~Dirk3214
Gast


Hi!

Ich habe ziemliche Probleme mit den Typen in C (komme aus der Java-Ecke)...

Momentan will ich die Registry durchsuchen.


Code:
RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Classes\\CLSID\\"), 0, KEY_READ, &hTestKey);



wenn ich den zweiten Paramter auf diese Weise übergeb funktioniert alles. Ich will ihn jetzt aber zusammensetzen. Also etwas in der Art


Code:
RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Classes\\CLSID\\" + "{CLSID}"), 0, KEY_READ, &hTestKey);



Wie mache ich das? In der Doku steht der zweite Param ist vom Typ "LPCTSTR".

Die Variable die ich anhängen will ist übrigens vom Typ "char*". Ich will also einen fest angegebenen String mit einem char* verknüpfen.

Kann mir jemand helfen???


Grüße, Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.12.2007, 13:19 Uhr
Bruder Leif
dances with systems
(Operator)


Lass das Pluszeichen weg, dann sollte das gehen. Zeiger auf Stringkonstanten zu addieren ist boese Denk dran, in C/C++ gibt es keinen "echten" String-Typ wie in Java...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.12.2007, 13:21 Uhr
Bruder Leif
dances with systems
(Operator)


Irks. Ich seh gerade, dass Du eine Variable anhaengen willst... soll das reines C werden oder C++? In C z.B. so:


C++:
char* buffer;

...

buffer = malloc(strlen(variable) + <Laenge der Stringkonstante+1>);
if (!buffer) {
...fehler
}
strcpy(buffer, "Stringkonstante");
strcat(buffer, variable);
RegOpenKeyEx...
free(buffer);


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.12.2007, 14:24 Uhr
~Dirk3214
Gast


Schonmal Danke für die Tips!!

Das Prog sieht jetzt grad so aus:


Code:
   char* buffer;
   buffer = (char*)malloc(strlen(key) + 30);
   if(!buffer)
       printf("Fehler!");

   strcpy_s(buffer, strlen(key) + 30, "SOFTWARE\\Classes\\CLSID\\");
   strcat_s(buffer, strlen(key) + 30, key);

   printf("--> %s", buffer);

   RegOpenKeyEx( HKEY_LOCAL_MACHINE, (LPCWSTR)buffer, 0, KEY_READ, &hTestKey)



Das Zusammenfügen funktioniert auch, wenn ich mir buffer ausgeben lass ist der Inhalt korrekt. Aber irgendwie scheint das übergeben nicht im richtigen Typ zu sein.

Wenn ichs so aufruf:


Code:
TEXT("SOFTWARE\\Classes\\CLSID\\{ED820E2C-869D-4450-8CDF-5CDEA074DB09}")



werden mir verschiedene Registryschlüssel angezeigt. Bei diesem Aufruf


Code:
(LPCWSTR)buffer



aber blöderweise keine......

Woran kann das liegen? Hier die Beschreibung zu RegOpenKeyEx


[man]
LONG WINAPI RegOpenKeyEx(
__in HKEY hKey,
__in_opt LPCTSTR lpSubKey,
__reserved DWORD ulOptions,
__in REGSAM samDesired,
__out PHKEY phkResult
);
[/man]


Ach ja, es muss kein reiner C-Code sei, C++ geht auch!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.12.2007, 16:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


entweder RegOpenKeyExA benutzen, oder unicode-support beim projekt deaktivieren.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.12.2007, 16:34 Uhr
0xdeadbeef
Gott
(Operator)


Hat MS dafür nicht dieses ganze _T-Rumgewurschtel? Irgendwie so in der Art:

C++:
TCHAR *buffer;

buffer = (TCHAR*) calloc(strlen(key) + 30, sizeof(TCHAR));
tsprintf(_T("SOFTWARE\\Classes\\CLSID\\%s"), key);
RegOpenKeyEx(HKEY_LOCAL_MACHINE, buffer, 0, KEY_READ, &hTestKey)
free(buffer);


key muss dabei nach wie vor ein char* sein, wegen des %s. tsprintf könnte auch _tsprintf heißen, da bin ich grad nicht 100%ig sicher.

Ansonsten, ich verschieb das ganze mal ins WinAPI-Forum.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: