GESTION BASE DE REGISTRE (LOCAL OU DISTANTE)AVEC DES FONCTIONS API(NEW)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
2 juin 2006 à 11:16
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006
-
4 juin 2006 à 16:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
sinon tu vas avoir des fuites de mémoire _partout_ !
dans ton GetValueData(), petit truc:
// ...
char * rValue = new char[cstMaxRegLength];
rValue[0] = '\0'; // place ca ici(valeur par défaut, si on veut), comme ca tu sauve beaucoup de « else/default/... »
// ..
la répétition de code c'est pas très bon ...
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006 2 juin 2006 à 16:57
« Rem:Compilation avec Borland C++ 5.5 (pas d'erreur de compil). »
une compilation sans erreur ne veut strictement _rien_ dire ...
tu peux très bien avoir « 0 error(s), 0 warning(s) » lors de la compilation
et obtenir un soft _complètement_ disfonctionnel!
UKR6900
Messages postés4Date d'inscriptionjeudi 23 janvier 2003StatutMembreDernière intervention24 juin 2006 2 juin 2006 à 12:13
Dans un code source ,il manque toujour quelque chose
c'est ça enrichir un code au fur et mesure des besoins.
Mais celui-ci est une base importante pour une programmation
système des base de registre.(Contrôle des paramétrages Anti-virus, création des
clé pour contrôle des logs etc...)
Ce sont les fonctions qui sont importantes,pas le code qui donne un exemple d'utilisation des fonctions.
Et celui qui comprend pas l'intérêt de ce code, c'est qu'il ne travaille pas dans le bon domaine de programmation et voilà....
Moi dans le temps, j'aurai été content de trouver des exemples comme celui-ci.
A bon entendeur, A+
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 juin 2006 à 11:22
Tu es sur qu'il ne manque rien? Parce que la j'ai pas compris l'intérêt de ton code
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 juin 2006 à 11:16
Je pensais pas qu'on pouvait déposer des ébauches par inadvertance
4 juin 2006 à 16:50
#include // std::cout
#include <string> // std::string
#include <sstream> // std::stringstream
// PCSTR >> const char*
std::string GetValueData(HKEY hkTopKey, PCSTR pSubKey, PCSTR pValueName)
{
HKEY hkKey;
DWORD dwType;
DWORD dwDataSize = cstMaxRegLength;
BYTE* pData;
std::string strBuffer;
std::stringstream strStream;
if (RegOpenKeyExA(hkTopKey, pSubKey, 0, KEY_READ, &hkKey) == ERROR_SUCCESS)
{
pData = new BYTE[cstMaxRegLength + 1];
if (RegQueryValueExA(hkKey, pValueName, NULL, &dwType, pData, &dwDataSize) == ERROR_SUCCESS)
{
switch (dwType)
{
case REG_BINARY:
strStream << (UINT)pData[0] << (CHAR)'.' <<\
(UINT)pData[1] << (CHAR)'.' <<\
(UINT)pData[2] << (CHAR)'.' <<\
(UINT)pData[3];
break;
case REG_DWORD:
strStream << *(DWORD*)pData;
break;
default: dwDataSize = 0;
// !break
case REG_EXPAND_SZ:
case REG_MULTI_SZ:
case REG_SZ:
pData[dwDataSize] = '\0'; // simple précaution
strStream << (PCSTR)pData;
break;
}
strBuffer = strStream.str();
}
delete [] pData; // libère la mémoire
RegCloseKey(hkKey);
}
return strBuffer;
}
int main()
{
std::string retval = GetValueData(..., ..., ...);
std::cout << retval << std::endl;
return 0;
}
2 juin 2006 à 17:06
dans « GetValueData() » tu as oublié de libérer la mémoire alloué pour lpData
« delete [] lpData; » avant de quitter la fonction(GetValueData)
2 juin 2006 à 17:03
« cout << GetValueData(hkKey,"SOFTWARE\\Microsoft\\DirectX","Version") << endl; »
ton GetValueData() retourne un pointeur sur un char* que tu as alloué
récupère la valeur de GetValueData() et _ensuite_, affiche la
char* ptr = GetValueData( ... );
cout << ptr << endl;
delete [] ptr;
sinon tu vas avoir des fuites de mémoire _partout_ !
dans ton GetValueData(), petit truc:
// ...
char * rValue = new char[cstMaxRegLength];
rValue[0] = '\0'; // place ca ici(valeur par défaut, si on veut), comme ca tu sauve beaucoup de « else/default/... »
// ..
la répétition de code c'est pas très bon ...
2 juin 2006 à 16:57
une compilation sans erreur ne veut strictement _rien_ dire ...
tu peux très bien avoir « 0 error(s), 0 warning(s) » lors de la compilation
et obtenir un soft _complètement_ disfonctionnel!
2 juin 2006 à 12:13
c'est ça enrichir un code au fur et mesure des besoins.
Mais celui-ci est une base importante pour une programmation
système des base de registre.(Contrôle des paramétrages Anti-virus, création des
clé pour contrôle des logs etc...)
Ce sont les fonctions qui sont importantes,pas le code qui donne un exemple d'utilisation des fonctions.
Et celui qui comprend pas l'intérêt de ce code, c'est qu'il ne travaille pas dans le bon domaine de programmation et voilà....
Moi dans le temps, j'aurai été content de trouver des exemples comme celui-ci.
A bon entendeur, A+
2 juin 2006 à 11:22
2 juin 2006 à 11:16