символ для ACHAR + objectARX

Я пытаюсь преобразовать предыдущий код в VS 2010. Код, который я пытаюсь преобразовать, упомянут ниже. Функция addCommand определяется как

addCommand(const ACHAR * cmdGroupName,  const ACHAR * cmdGlobalName, const ACHAR * cmdLocalName, Adesk::Int32 commandFlags, AcRxFunctionPtr FunctionAddr,AcEdUIContext *UIContext=NULL,  int fcode=-1,  HINSTANCE hResourceHandle=NULL,  AcEdCommand** cmdPtrRet=NULL)

Третий обязательный аргумент имеет тип ACHAR. Функция вызывается следующим образом.

char cmdLocRes[65];

// If idLocal is not -1, it's treated as an ID for
// a string stored in the resources.
if (idLocal != -1) {

// Load strings from the string table and register the command.
::LoadString(_hdllInstance, idLocal, cmdLocRes, 64);
acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLocRes, cmdFlags, cmdProc);

Моя проблема в том, что переменная cmdLocRes имеет тип char, но аргумент должен быть типа ACHAR.

Как я могу конвертировать то же самое?

0

Решение

  1. ACHAR — это typedef (сделанный Autodesk в файле AdAChar.h) из wchar_t. Так что вопрос в том, как преобразовать символ в wchar_t.
  2. В более широком контексте эта проблема связана с существованием Unicode. Программисты Linux и Windows обычно обсуждают это, не понимая друг друга. Поскольку я тоже этого не понимаю, я не могу этого объяснить. Есть темы для страстного бобра: какой "неправильно" с C ++ wchar_t и wstrings? Какие есть альтернативы широким символам?
  3. Фоллинг может дать вам представление о том, как его преобразовать.
    // Convert char to wchar_t

    char cmdLocRes [65];

    // Замечание: убедитесь, что cmdLocRes содержит элементы!

    cmdLocRes [0] = ‘A’;

    cmdLocRes [1] = ‘\ 0’;

    // Получить wstringstream

    std :: wstringstream str;

    // Записываем массив char в wstringstream

    ул << cmdLocRes;

    // Получить строку wstringstream

    std :: wstring wstr = str.str ();

    // Получить wchar_t из строки

    const wchar_t * chr1 = wstr.c_str ();

    const ACHAR * chr2 = wstr.c_str (); // Мы видим, что wchar_t == ACHAR!

  4. Лучше подумайте об использовании wchar_t cmdLocRes [65] вместо char cmdLocRes [65]!

  5. Извините за стиль кода, но это текстовое поле является еще одним хорошим примером того, как этого не делать. Мне потребовалось больше времени, чтобы попытаться отформатировать блок кода (и, пожалуйста, посмотрите на него !!!), чем написать ответ. Иисус!!!
0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector