我嘗試閱讀我的NPAPI-插件註冊表:C++讀取註冊表
bool ScriptablePluginObject::Invoke(NPObject* obj, NPIdentifier methodName, const NPVariant* args, uint32_t argCount, NPVariant* result) {
ScriptablePluginObject *thisObj = (ScriptablePluginObject*) obj;
char* name = npnfuncs->utf8fromidentifier(methodName);
LPCWSTR game_path = getRegKey(L"SOFTWARE\\World of RPG", L"Path");
MessageBox(NULL, game_path, L"Debugging", MB_TOPMOST);
/* ... */
}
LPCWSTR ScriptablePluginObject::getRegKey(LPCWSTR location, LPCWSTR name) {
HKEY hKey;
LPBYTE folder = new BYTE[MAX_PATH];
DWORD dwSize = sizeof(folder);
long registry = RegOpenKeyEx(HKEY_LOCAL_MACHINE, location, 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
long entry = RegQueryValueEx(hKey, name, NULL, REG_NONE, folder, &dwSize);
if(registry != ERROR_SUCCESS) {
return L"Error1";
}
if(entry != ERROR_SUCCESS) {
return L"Error2";
}
RegCloseKey(hKey);
folder[dwSize/sizeof(folder[0])] = '\0';
return (LPCWSTR) folder;
}
但它返回的每一個電話Error2
。我已經嘗試了很多變化:
- 改變路徑(以開始和/或結束
\\
) - 變化參數
我想要得到的HKEY_LOCAL_MACHINE\SOFTWARE\World of RPG\Path
路徑:
任何人都可以幫到我嗎?我做錯了什麼?
嘗試檢查實際[返回值](http://msdn.microsoft.com/en-us/庫/風ows/desktop/ms724897%28v = vs.85%29.aspx),看看它爲什麼失敗。如果你沒有檢查返回值,你看不到爲什麼它不返回'ERROR_SUCCESS'。它返回其他的值,這些值有意義,但是如果你真的看看它的含義,它的意義就很重要。你寫的代碼現在寫道:「如果它不能成功,給我看一些ErrorX的無意義文本。」相反,保存返回值,並檢查保存的值是否符合'ERROR_SUCCESS'。 –
我真的是新的C++。我試圖將長整型值轉換爲LPCWSTR以在消息框中打印出來。但它不起作用:http://pastebin.com/1Q2F3JMp –
將數字轉換爲字符串是一項非常標準的任務,並且與Windows API或註冊表無關。如果你不能執行這個任務,也許你還沒有準備好嘗試編寫一個NPAPI插件。請參閱[這裏](http://www.cplusplus.com/articles/D9j2Nwbp/)瞭解如何進行轉換 - 我發現它在Google中使用'cplusplus integer to string'。 –