#define 字符串的类型是什么?
What is a #define string's type?
我想我做错了。我正在为MSR类型对象制作SO。默认情况下(如果我没看错的话),OPOS使用unicode。所以我让我的c++自动化类也使用unicode,据我所知,这是没有办法的。在OPOS头类中有两个字符串定义,第三个是我创建的:
#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结合?我是否应该这样做,以便我只能访问注册表值?
谢谢。
您的代码在窄字符串和宽字符串之间存在不一致。文字'a'
的类型为char
,是一个窄字符。文字L'a'
的类型为wchar_t
,并且是一个宽字符。
接下来,我们可以将这些应用于字符串:"abc"
是const char (&)[4]
类型的窄字符串。L"abc"
是const wchar_t (&)[4]
类型的宽字符串。
为了减少同时支持两者的麻烦,有一个被称为TCHAR
的东西。在Windows头文件中定义,该类型是char
或wchar_t
,取决于是否定义了UNICODE
。如果定义了,则TCHAR
将是wchar_t
。如果没有定义,则TCHAR
为char
。
还附带了一个TEXT
宏,它将字符串文字转换为TCHAR
类型的字符。也就是说,如果定义了UNICODE
,则TEXT("abc")
等于L"abc"
,如果没有定义,则TEXT("abc")
等于"abc"
。
字符串也被赋予了一些类型定义:
LP[C][W|T]STR
LP
表示指针,STR
表示"指向字符串"。如果包含C
,则该字符串将是一个常量。如果包含W
或T
,则字符串将分别由wchar_t
或TCHAR
类型的字符组成。
LPSTR: char *
LPCSTR: const char *
LPWSTR: wchar_t *
LPCTSTR: const TCHAR *
使用此信息,您可以正确地理解为什么使用TCHAR
和TEXT
将导致您的代码与其他内容兼容,无论它使用窄字符还是宽字符。
这里有一个简单的例子,记住std::string
,对于我们的目的,是std::basic_string<char>
:
std::basic_string<TCHAR> s(TEXT("abcd"));
s += TEXT("ZYXW"); //s is now `TEXT("abcdZXW")
变化
<>之前#define OPOS_ROOTKEY "SOFTWARE\OLEforRetail\ServiceOPOS"#define OPOS_CLASSKEY_MSR "MSR"\" OPOS_CLASSKEY_MSR "\"之前<>之前#define OPOS_ROOTKEY L"SOFTWARE\OLEforRetail\ServiceOPOS"#define OPOS_CLASSKEY_MSR L"MSR"#define OPOS_ROOTKEY L"\" OPOS_CLASSKEY_MSR "\"- 静态自动 constexpr t = { "red" , "black" , "green" } 是什么类型;派生到?
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 这在C++是什么类型的错误?
- int(int)& 或 int(int) const &是什么类型?
- 我如何找出3D容器的元素是什么类型
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 这个 lambda 的参数是什么类型?
- 转换逻辑目标是什么类型
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- 这是什么类型的行为
- 给定以下内容,"function"是什么类型?
- C++:文本文件中的数据是什么类型的
- C++11 中的"auto var = {condition} ? 1 : 1.0"是什么类型?是双精度还是整数?
- C++中的 decltype(this) 是什么类型
- 如何知道模板<类型名称类型>是什么类型?
- 内置数组的大小是什么类型?
- c++ 11中的std::chrono::high_resolution_clock::now()是什么类型?
- 在Microsoft Visual C++中,光线跟踪器应该是什么类型的项目
- 如何为delete编写一个C包装器,既快速又释放给定的任何类型,而不告诉它是什么类型
- 如何编写一个函数,无论数组是什么类型都输出它