我想我正在讨论这个错误。我正在为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:它实际上是文本替换,所以类型是文字的隐式类型。 –