Register

Status
Niet open voor verdere reacties.

timomaas

Gebruiker
Lid geworden
23 sep 2006
Berichten
35
Ik ben bezig met register dingen doen, nu is het mij "bijna" gelukt om een waarde eruit te krijgen, maar de functie geeft het terug als LONG, maar om het weer te geven moet het CHAR zijn en daar geeft de compiler een error... iemand idee?
Code:
   HKEY hKey;
    char szProductType[BUFSIZE];
    DWORD dwBufLen=BUFSIZE;
    LONG lRet; 
    lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                         TEXT("SOFTWARERockstar GamesGTA San AndreasInstallation"),
                        0, KEY_QUERY_VALUE, &hKey);
    if(lRet != ERROR_SUCCESS)
        return 0;

    lRet = RegQueryValueEx( hKey, "Installed", NULL, NULL,
                            (LPBYTE) szProductType, &dwBufLen);
    RegCloseKey( hKey ); 
         CreateWindow("Static", //vensterklasse naam
         lRet , //tekst
         WS_CHILD|WS_VISIBLE, //stijl
         0, //positie X (in pixels)
         150, //positie Y (in pixels)
         1024, //breedte in pixels
         20, //hoogte in pixels
         hwnd, //handle van hoofdvenster
         0,
         hThisInstance, //handle van instantie
         0
         );
is mijn code (fragmentjes)
HTML:
109 C:\Documents and Settings\Timo\Mijn documenten\c++\api shizzle\test1\main.cpp invalid conversion from `LONG' to `const CHAR*' 
109 C:\Documents and Settings\Timo\Mijn documenten\c++\api shizzle\test1\main.cpp   initializing argument 3 of `HWND__* CreateWindowExA(DWORD, const CHAR*, const CHAR*, DWORD, int, int, int, int, HWND__*, HMENU__*, HINSTANCE__*, void*)'
= de la error
 
lRet komt terug met een waarde of het is gelukt of niet gelukt:

MSDN zei:
Return Values

If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is a nonzero error code defined in WINERROR.H. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.

Waarom probeer je IRet te weergeven op je scherm?
 
even later maak ik van dat lRet een waarde uit het register... en weergeven op scherm? ik werk in API en als je iets beter kijkt zie je dat ik het al probeer te laten zien, anders zou ik ook de error niet hebben he;-)
 
Die error heb je gewoon omdat je je LONG variable op de plaats van een LPCTSTR variable zet, en die kan hij niet direct omzette, dat moet je eerst doen.
 
De compiler wil graag een char* oftewel een pointer naar een array van char's :eek:

Conversie:

Code:
long iets;
char Buffer[100] // zomaar een grootte

sprintf(Buffer, "%l", iets);
 
werkt nog steeds niet, of moet ik iets aan de 2e parameter veranderen?
 
tja het zou ook een hoofdletter L kunnen zijn, lang niet meer gedaan. Anders moet je maar even de mogelijkheden van sprintf opzoeken? Welke foutmelding krijg je nu dan?
 
ik houd dezelfde error.. " sprintf(szProductType, "%l", lRet); " is de regel die ik heb toegevoegd...
 
Waarom probeer je IRet te weergeven op je scherm?

goeie vraag eigenlijk want als de conversie lukt, bereik je er alleen mee dat je venster de naam krijgt van de (numerieke) waarde die ERROR_SUCCES voorsteld. (die staat in één of andere header)
 
//uit de help van eVc4:

LONG RegQueryValueEx(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);

lpData
[out] Pointer to a buffer that receives the value's data. This parameter can be NULL if the data is not required.

Return Values
ERROR_SUCCESS indicates success. A nonzero error code defined in Winerror.h indicates failure.

Als je dus data wilt hebben heb je lpData (szProductType in jouw geval) nodig lijkt mij, en niet de return waarde. Maar pin me er niet op vast, ik heb de functie nooit gebruikt ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan