Преобразовать элемент lpstrtext структуры TEXTRANGE в MultiByteCharacterSet

У меня есть два разных проекта на C ++, один компилируется в статическую библиотеку и использует кодировку символов Unicode, поскольку он должен поддерживать несколько языков (Spell Checker), другой — это устаревший проект MFC, который использует кодировку MultiByteCharacterSet.

Устаревший проект должен использовать библиотеку Project (для проверки правописания содержимого элемента управления richedit в интерактивном режиме).

Когда я создаю одинокий проект с управлением richedit, устанавливаю кодировку символов на юникод и ссылаюсь на библиотеку, он работает нормально. но там, где я пытаюсь ссылаться на библиотеку из унаследованного проекта так же, как я делал с одиноким проектом, она не работает.

Я исследовал и понял, что структура TEXTRANGE, которая заполняется EM_GETTEXTRANGE, ожидает значение Unicode в своем члене lpstrtext, что не будет иметь место для унаследованного проекта. реализация в библиотеке выглядит следующим образом:

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.

1

Решение

TEXTRANGE это макрос:

#ifdef UNICODE
#define TEXTRANGE   TEXTRANGEW
#else
#define TEXTRANGE   TEXTRANGEA
#endif // UNICODE

Таким образом, вы должны быть в состоянии использовать TEXTRANGEA вместо того, чтобы заставить char* тип.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]