我用CRegKey打开一些,但是这个m_hKey != 0
I use CRegKey to open some, but this m_hKey != 0
我想通过注册表获取JDk路径,这个路径是:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8
当我使用:
CRegKey.open(HKEY_LOCAL_MACHINE, L"SOFTWARE\JavaSoft\Java Development Kit\1.8")
它抛出表达式 m_hKey != 0。那么发生了什么?如何修复此错误?
这是我的代码:
// Get Java environment variable install path
CRegKey key;
wchar_t JavaHome[40];
ULONG szJavaHome = 40;
bool rest = key.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE\JavaSoft\Java Development Kit\1.8");
if (key.m_hKey == 0)
MessageBox(L"11");
rest = key.QueryStringValue(L"JavaHome", JavaHome, &szJavaHome);
您不能简单地使用 CRegKey
variable key
after trying to Open
它,而不检查它的 return 值。
auto retOpenKey = key.Open(...); //LONG not bool
if (ERROR_SUCCESS == retOpenKey)
{
//Ok do stuff with key
}
else
auto err = GetLastError();
System error codes and / or FormatMessage
您还可以查看函数的实现,并在那里进行调试,因为它在 header:
中是内联的
inline LONG CRegKey::Open(
_In_ HKEY hKeyParent,
_In_opt_z_ LPCTSTR lpszKeyName,
_In_ REGSAM samDesired) throw()
{
ATLASSUME(hKeyParent != NULL);
HKEY hKey = NULL;
LONG lRes = m_pTM != NULL ?
m_pTM->RegOpenKeyEx(hKeyParent, lpszKeyName, 0, samDesired, &hKey) :
RegOpenKeyEx(hKeyParent, lpszKeyName, 0, samDesired, &hKey);
if (lRes == ERROR_SUCCESS)
{
lRes = Close();
ATLASSERT(lRes == ERROR_SUCCESS);
m_hKey = hKey;
#if WINVER >= 0x0501
m_samWOW64 = samDesired & (KEY_WOW64_32KEY | KEY_WOW64_64KEY);
#endif
}
return lRes;
}
我想通过注册表获取JDk路径,这个路径是:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8
当我使用:
CRegKey.open(HKEY_LOCAL_MACHINE, L"SOFTWARE\JavaSoft\Java Development Kit\1.8")
它抛出表达式 m_hKey != 0。那么发生了什么?如何修复此错误?
这是我的代码:
// Get Java environment variable install path
CRegKey key;
wchar_t JavaHome[40];
ULONG szJavaHome = 40;
bool rest = key.Open(HKEY_LOCAL_MACHINE, L"SOFTWARE\JavaSoft\Java Development Kit\1.8");
if (key.m_hKey == 0)
MessageBox(L"11");
rest = key.QueryStringValue(L"JavaHome", JavaHome, &szJavaHome);
您不能简单地使用 CRegKey
variable key
after trying to Open
它,而不检查它的 return 值。
auto retOpenKey = key.Open(...); //LONG not bool
if (ERROR_SUCCESS == retOpenKey)
{
//Ok do stuff with key
}
else
auto err = GetLastError();
System error codes and / or FormatMessage
您还可以查看函数的实现,并在那里进行调试,因为它在 header:
中是内联的inline LONG CRegKey::Open(
_In_ HKEY hKeyParent,
_In_opt_z_ LPCTSTR lpszKeyName,
_In_ REGSAM samDesired) throw()
{
ATLASSUME(hKeyParent != NULL);
HKEY hKey = NULL;
LONG lRes = m_pTM != NULL ?
m_pTM->RegOpenKeyEx(hKeyParent, lpszKeyName, 0, samDesired, &hKey) :
RegOpenKeyEx(hKeyParent, lpszKeyName, 0, samDesired, &hKey);
if (lRes == ERROR_SUCCESS)
{
lRes = Close();
ATLASSERT(lRes == ERROR_SUCCESS);
m_hKey = hKey;
#if WINVER >= 0x0501
m_samWOW64 = samDesired & (KEY_WOW64_32KEY | KEY_WOW64_64KEY);
#endif
}
return lRes;
}