61
Программирование / Re: Написание плагина. Настройка проекта
« : Февраль 17, 2019, 09:00:23 am »
Получилось реализовать работу с клавишами. Столкнулся с интересным поведением функции.
Иногда она некорректно выводит сообщения, А когда вообще ничего мы не видим никакого текст на экране.
Как вы думаете с чем связанное такое поведение? Может я как-то не так делаю?
Оказалось нужно строку перевести в wchar_t.
Код: Text
- int printmessage(lua_State* L) {
- try {
- if (LUA_TSTRING == lua_type(L, -1)) {//money.
- string msg = lua_tostring(L, -1);
- char str[255];
- strcpy(str, msg.c_str());
- static char x[255];
- snprintf(x, 255,"%s", str);
- CMessages::AddMessageJumpQ(x, 5000, 3);
- return 0;
- }
- else { throw "bad argument in function printmessage"; }
- }
- catch (const char* x) {
- writelog(x);
- }
- return 0;
- };
Иногда она некорректно выводит сообщения, А когда вообще ничего мы не видим никакого текст на экране.
Как вы думаете с чем связанное такое поведение? Может я как-то не так делаю?
Оказалось нужно строку перевести в wchar_t.
Код: C++
- int printmessage(lua_State* L) {// аргументы текст и и время вывода на экран.
- try {
- if (LUA_TSTRING == lua_type(L, -2) && LUA_TNUMBER == lua_type(L, -1)) {//строка.
- string aString = lua_tostring(L, -2);
- double t = lua_tonumber(L, -1);// если число.
- int time = (int)t;
- const int maxSize = 1024; // 1Мб символов
- wchar_t *str = L"_";
- wchar_t buff[maxSize];
- int nSize = ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), NULL, NULL);
- wchar_t *tBuff = buff;
- ::MultiByteToWideChar(CP_UTF8, 0, aString.c_str(), static_cast<int>(aString.length() + 1), buff, nSize);
- str = tBuff;
- CMessages::AddMessageJumpQ(str, time, 3);
- this_thread::sleep_for(chrono::milliseconds(time));
- return 0;
- }
- else { throw "bad argument in function printmessage"; }
- }
- catch (const char* x) {
- writelog(x);// записать ошибку в файл.
- }
- return 0;