J'essaie de lire certains détails ODBC à partir d'un registre et pour cela j'utilise RegQueryValueEx. Le problème est lorsque je compile la version de publication, il ne peut tout simplement pas lire les valeurs de registre.RegQueryValueEx ne fonctionne pas avec une version Release mais fonctionne correctement avec Debug
Le code est:
CString odbcFuns::getOpenedKeyRegValue(HKEY hKey, CString valName)
{
CString retStr;
char *strTmp = (char*)malloc(MAX_DSN_STR_LENGTH * sizeof(char));
memset(strTmp, 0, MAX_DSN_STR_LENGTH);
DWORD cbData;
long rret = RegQueryValueEx(hKey, valName, NULL, NULL, (LPBYTE)strTmp, &cbData);
if (rret != ERROR_SUCCESS)
{
free(strTmp);
return CString("?");
}
strTmp[cbData] = '\0';
retStr.Format(_T("%s"), strTmp);
free(strTmp);
return retStr;
}
J'ai trouvé une solution pour cela - I Optimisation désactivée (/ Od), mais il semble étrange que je devais le faire. Y a-t-il un autre moyen? J'utilise Visual Studio 2005. Peut-être que c'est un bug dans VS? Presque oublié - le code d'erreur est 2 (car la clé ne serait pas trouvée)
Oui. Dans la version Debug, la valeur sera initialisée à 0xcccccccc. Ne soustrayez pas 1. Utilisez la classe CRegKey pour éviter ces pièges. –
@Hans Passant Il a un tampon pour N caractères, filles avec des zéros. S'il ne soustrait pas 1 et que la fonction remplit tous les N caractères, la chaîne n'a plus de caractère nul. – sharptooth
Vérifiez les documents SDK: * Si les données ont le type REG_SZ, REG_MULTI_SZ ou REG_EXPAND_SZ, cette taille inclut tous les caractères ou caractères null à moins que les données aient été stockées sans eux * –