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

0

Я пытаюсь преобразовать предыдущий код в 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 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.

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

Теги:
autocad-plugin

1 ответ

0
  1. ACHAR - это typedef (сделанный Autodesk в файле AdAChar.h) wchar_t. Итак, вопрос заключается в том, как преобразовать char в wchar_t.
  2. В более широком контексте эта проблема возникает из-за существования юникода. Программисты 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

    str << cmdLocRes;

    //Получить wstring из wstringstream

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

    //Получить wchar_t из wstring

    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. Извините за стиль кода, но это текстовое поле - еще один отличный пример того, как этого не сделать. Мне потребовалось больше времени, чтобы попытаться отформатировать блок кода (и, пожалуйста, посмотри на него !!!), чем написать ответ. Иисус!!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню