我想我正在討論這個錯誤。我正在爲MSR類型對象製作SO。並且默認情況下(如果我正確讀取它)OPOS使用unicode。所以我讓自己的C++自動化類使用unicode,並且據我所知,這是無法實現的。在OPOS頭類有2所字符串定義,第三個是我的創作:什麼是#define字符串的類型?
#define OPOS_ROOTKEY "SOFTWARE\\OLEforRetail\\ServiceOPOS"
#define OPOS_CLASSKEY_MSR "MSR"
#define OPOSMSR OPOS_ROOTKEY "\\" OPOS_CLASSKEY_MSR "\\"
這是這樣,一個人可以訪問註冊表。所以我決定讓自己成爲一個註冊表幫助類,而不是把它放在我的SO裏。看起來我很難想出我應該怎麼做到底。我複製了另一個SO的工作代碼,但是我覺得那個代碼沒有正確地編寫,我希望我的代碼第一次正確。
所以我想出了這個,但我無法弄清楚如何將我的字符串與類名相結合。我在我的構造函數中將類名稱作爲參數。
RegistryHelper::RegistryHelper(LPCTSTR deviceName) {
cout << "RegistryHelper::RegistryHelper()+" << endl;
baseOpen = true;
CString test;
test.Format("%s%s",OPOSMSR, theClass); //fail
REGSAM access = KEY_READ | KEY_WOW64_64KEY;
LONG nError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, theClass ,0, access,&hBaseKey); //not what I want, but would compile, I want test here instead of theClass
if (nError != ERROR_SUCCESS) {
cerr << "(E)RegistryHelper::RegistryHelper(): Failed to load base key. [" <<(int)nError << "]" << endl;
RegCloseKey(hBaseKey);
baseOpen = false;
}
cout << "RegistryHelper::RegistryHelper()-" << endl;
}
關於我在做什麼的錯誤提示?因爲我在這個問題上:我將發佈我的所有代碼。它有多糟糕?
什麼我之後是這樣的
unsigned int baud;
char* parity;
bool MSRSO::LoadRegistryValuesIntoMemory(LPCSTR deviceName) {
RegistryHelper reg(deviceName);
bool required = reg.LoadDWORD("BaudRate", 19200, baud);
required = required && reg.LoadREGSZ("Parity", "NONE", parity);
//other values
reg.Close();
return required;
}
請記住我是一個C#和Java的傢伙,所以我可以有我的數據類型錯誤。我只在當天的SUPER舊版Linux機器上用C++編寫簡單的hello world程序和temp轉換程序。雖然我在C++上越來越好,但我仍然不舒服。那麼總結一下#define類型的數據類型是什麼?我如何將它與LPCTSTR結合?我是否應該這樣做,以便我只能訪問註冊表值?
謝謝。
你問一個字符串類型?這是'const char(&)[N]'。 '#define'在編譯前做文本替換/ – chris
是的,但是數據類型是什麼?我可以做LPCTSTR x = OPOS_ROOTKEY嗎?或者它是char * x = OPOS_ROOTKEY; –
@RobertSnyder:它實際上是文本替換,所以類型是文字的隱式類型。 –