lhj*_*362 79 c++ winapi lpcstr
首先,究竟是什么?我猜它是一个指针(LPC意味着长指针常量),但"W"是什么意思?它是指向字符串的特定指针还是指向特定字符串的指针?例如,我想关闭一个名为"TestWindow"的窗口.
HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
Run Code Online (Sandbox Code Playgroud)
代码是非法的,它不起作用,因为const char [6]无法转换为CONST WCHAR.我根本得不到它.我想清楚地了解所有这些LPCWSTR,LPCSTR,LPSTR.我试图找到一些东西,但我更加困惑.在msdn网站FindWindowEx被声明为
HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
Run Code Online (Sandbox Code Playgroud)
所以最后一个参数是LPCSTR,编译器要求LPCWSTR.请帮忙.
Jar*_*Par 122
LPCWSTR代表"指向恒定宽字符串的长指针".W代表Wide,表示字符串与正常字符相比存储在2字节字符中char.对于必须处理非ASCII字符串的任何C/C++代码都是通用的.=
要获得要分配给a的普通C字符串LPCWSTR,需要在其前面加上L.
LPCWSTR a = L"TestWindow";
Run Code Online (Sandbox Code Playgroud)
Mat*_*ner 10
LPCWSTR相当于wchar_t const *.它是指向宽字符串的指针,该字符串不会被函数调用修改.
您可以LPCWSTR通过将L添加到字符串文字来指定s:LPCWSTR *myStr = L"Hello World";
LPC T STR和任何其他T类型,根据项目的Unicode设置采用字符串类型.如果_UNICODE为您的项目定义,则T类型的使用与宽字符形式相同,否则为Ansi形式.相应的函数也将以这种方式调用:FindWindowEx定义为FindWindowExA或FindWindowExW取决于此定义.
它是指向常量宽字符串(即一串宽字符)的长指针.
因为它是一个宽字符串,你想让你看起来像:L"TestWindow".我也不会创建中间体a,我只是传递L"TestWindow"参数:
ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");
Run Code Online (Sandbox Code Playgroud)
如果你想成为迂腐正确的,一个"LPCTSTR"是一个"文本"串 - 在Unicode构建和在ANSI构建一个窄字符串宽字符串,所以你应该使用适当的宏:
ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));
Run Code Online (Sandbox Code Playgroud)
很少有人关心如何生成可以为Unicode和ANSI字符集编译的代码,如果你没有让它真正正常工作,那么可能需要额外的工作才能获得很少的收益.在这种特殊情况下,没有太多额外的工作,但如果你正在操作字符串,那么就有一整套字符串操作宏可以解析为正确的函数.
| 归档时间: |
|
| 查看次数: |
126142 次 |
| 最近记录: |