将 TEXTRANGE 结构的 lpstrtext 成员转换为多字节字符集
Convert TEXTRANGE structure's lpstrtext member to MultiByteCharacterSet
我有两个不同的项目C++,一个编译为静态库并使用Unicode字符编码,因为它必须支持多种语言(拼写检查器),另一个是使用MultiByteCharacterSet编码的传统MFC项目。
旧项目必须使用库项目(以交互方式对 richedit 控件的内容进行拼写检查)。
当我使用 richEdit 控件构建一个单独的项目时,将字符编码设置为 Unicode 并引用库,它工作正常。 但是当我尝试以与单独项目相同的方式从旧项目中引用库时,它不起作用。
我调查并意识到EM_GETTEXTRANGE填充的 TEXTRANGE 结构需要在其 lpstrtext 成员中有一个 Unicode 值,而遗留项目并非如此。 库中的实现如下:
TEXTRANGE txtRange;
memset (&txtRange, 0, sizeof(txtRange));
memset (bufW, 0, sizeof (bufW));
//debug_log("Size of TEXTRANGE: x: %d and Size of BufW: %d.", sizeof(txtRange), sizeof(bufW));
txtRange.lpstrText = string_from_unicode_cp(bufW, CP_ACP);
txtRange.chrg.cpMin = 0;
txtRange.chrg.cpMax = _countof(bufW);
debug_log("count of bufw: %s.", bufW);
SendMessage (hwnd, EM_GETTEXTRANGE, 0, (LPARAM)&txtRange);
debug_log("txtRange.lpstrText is: %S",txtRange.lpstrText);
但我收到错误:
SpellChecker.cpp(215): error C2440: '=' : cannot convert from 'char *' to 'LPWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Visual Studio说库中的lpstrtext成员是LPWSTR(可能是因为选择了UNICODE格式),这是可以理解的。
我的问题是,有没有办法强制 lpstrtext 成员期望 LPSTR(强制转换),即使包含它的项目设置为使用 unicode。
TEXTRANGE
是一个宏:
#ifdef UNICODE
#define TEXTRANGE TEXTRANGEW
#else
#define TEXTRANGE TEXTRANGEA
#endif // UNICODE
因此,您应该能够使用TEXTRANGEA
来强制char*
类型。
相关文章:
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- C++如何将字符数组转换为字节向量(向量<byte>)
- 如何将 CString 转换为字节 [] 数组?
- 使用 ESP8266/8285 将字符串从 Web 服务器转换为字节数组
- 编译时将字符*转换为字节
- 多字节到宽字符无法正常工作
- 将uint64_t转换为字节时从不同大小的整数强制转换为指针
- 如果使用多字节字符集,为什么TCHAR值会更改
- 将 char[] 数组转换为字节,然后将字节转换为 int,反之亦然
- 在 c++ 中将字符串转换为字节
- 从多字节字符集转换旧的Visual Studio C++项目
- 多字节到宽字符将 (°) 度数符号转换为
- UCS-4 到 Solaris 上的多字节转换
- 将 TEXTRANGE 结构的 lpstrtext 成员转换为多字节字符集
- 多字节到宽字符转换后,内存中存在临时副本
- 如何将多字节UTF-8 std::string转换为NSString
- 如何在mac上将多字节转换为宽字符
- 从多字节编码到Unicode的转换
- 我可以使用_bstr_t类在Windows上的多字节和Unicode之间进行转换吗?(c++)