将 TEXTRANGE 结构的 lpstrtext 成员转换为 MultiByteCharacterSet
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*
。
我有两个不同的 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*
。