我想我做错了。我正在为 MSR 类型对象制作 SO。默认情况下(如果我没看错的话)OPOS 使用 unicode。所以我让我的 C++ 自动化类也使用 unicode,据我所知,没有办法绕过它。在 OPOS 头类中有 2 个字符串定义,第三个是我创建的:
#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 人,所以我的数据类型可能有误。以前,我只在一个超级旧的 linux 机器上用 C++ 为自己编写了简单的 hello world 程序和临时转换程序。尽管我在 C++ 方面越来越好,但我仍然对此感到不舒服。那么总结一下#define类型的数据类型是什么?如何将它与 LPCTSTR 结合使用?我应该这样做以便我只能访问注册表值吗?
谢谢你。