Товарищи помогите/подскажите. Как решить проблему с кодировкой, функция возвращает вот такие кракозябры
Какая функция?
Товарищи помогите/подскажите. Как решить проблему с кодировкой, функция возвращает вот такие кракозябры
2024.08.27 17:08:24.455 test EURUSD,H1: њN …Ђ)
мт4 или мт5
в MT (что 5 что 4), GetLastError() вообще возвращает целое число. То есть даже и не строку которую можно в лоб напечатать
откуда и как взята строка ?
Вот внутренный код самой функции GetLastError()
--------------------------- main.cpp --------------------------- ---------------------------------------------------------------- void WSGetLastError(char *data) { if(last_error.length() > 0) { strcpy(data, last_error.c_str().c_str()); strcat(data, "\0"); } } MT_EXPFUNC void __stdcall WSGetLastError(const int id, char *data) { if (wsProcessor.find(id) == wsProcessor.end()) { return; } wsProcessor[id]->WSGetLastError(data); } ------------------------ lib_include.mqh ----------------------- ---------------------------------------------------------------- #import "libliblib.dll" int WSGetLastError(int id, uchar &data[]); #import static string WS_GetLastError(int _id) { uchar _error[8048]; WSGetLastError( _id, _error ); return CharArrayToString( _error ); } string GetLastError() { return WS_GetLastError(_id); } ---------------------- test.mq4 OR test.mq5 -------------------- ---------------------------------------------------------------- #property strict #include <lib_include.mqh> void OnTick() { Print(GetLastError()); }В итоге функция Print(GetLastError()) возвращает вот такие кракозябры:
2024.08.27 17:08:24.455 test EURUSD,H1: њN …Ђ)sвЙЧ+Gдќ)DіфЗh§џіљJР"x|ZѕХ7µ.рЊ€_NVm:ЏGЧOЁ?Ь– вњ12ШЙ^…! н*ГЪJМ83ћА. ‰jаRє2ўЯфvVЦ„€J‹ќ59к‹C6fnмS%&О¦‰4„ЛЯ9/ћ]?74PђъЫ@PuШUЈeТoФЫ“ч]ҐTF†x©=р0ОЕfЫАtнУМьZJ|TЏЬД®Л"hYч]5Сm¦›хБjoЄsЮИ КвDЃЂЃМwЛнЪO—Fк•Ѓы`ЈIсBr2ЦЩЭТ ТЁЩ„FлжB:Уф[к>ч%аІр8ЖђЩ‚ЙРџј
Вот внутренный код самой функции GetLastError()
В итоге функция возвращает вот такие кракозябры:2024.08.27 17:08:24.455 test EURUSD,H1: њN …Ђ)sвЙЧ+Gдќ)DіфЗh§џіљJР"x|ZѕХ7µ.рЊ€_NVm:ЏGЧOЁ?Ь– вњ12ШЙ^…! н*ГЪJМ83ћА. ‰jаRє2ўЯфvVЦ„€J‹ќ59к‹C6fnмS%&О¦‰4„ЛЯ9/ћ]?74PђъЫ@PuШUЈeТoФЫ“ч]ҐTF†x©=р0ОЕfЫАtнУМьZJ|TЏЬД®Л"hYч]5Сm¦›хБjoЄsЮИ КвDЃЂЃМwЛнЪO—Fк•Ѓы`ЈIсBr2ЦЩЭТ ТЁЩ„FлжB:Уф[к>ч%аІр8ЖђЩ‚ЙРџј
бегло глянул:
1. в методе WGetLastError(char *data) добавьте ветку
void WSGetLastError(char *data) { if (last_error.length() > 0) { strcpy(data, last_error.c_str().c_str()); strcat(data, "\0"); } else { data[0]='\0'; } }
и такое-же в экспортируемую функцию
скорее всего вы просто мусор распечатали. То есть то что валялось в массиве. Ошибки нет, а мусор есть
2. (просто рекомендация) при передаче массивов в DLL, сообщайте так-же их размер.
3. по возможности не используйте void. Лучше вернуть признак успех/неуспех или код результата/ошибки
бегло глянул:
1. в методе WGetLastError(char *data) добавьте ветку
и такое-же в экспортируемую функцию
скорее всего вы просто мусор распечатали. То есть то что валялось в массиве. Ошибки нет, а мусор есть
2. (просто рекомендация) при передаче массивов в DLL, сообщайте так-же их размер.
3. по возможности не используйте void. Лучше вернуть признак успех/неуспех или код результата/ошибки
Спасибо большое!
1. Да Вы правы, кракозябры появляются только когда нет ошибки.
2. Так и делаю.
3. С чем связано нежелательность использование void ?
В итоге должно быть так, верно ?
--------------------------- main.cpp --------------------------- ---------------------------------------------------------------- void WSGetLastError(char *data) { if(last_error.length() > 0) { strcpy(data, last_error.c_str().c_str()); strcat(data, "\0"); } else { data[0]='\0'; } } MT_EXPFUNC void __stdcall WSGetLastError(const int id, char *data) { if (wsProcessor.find(id) == wsProcessor.end()) { return; } else { data[0]='\0'; } wsProcessor[id]->WSGetLastError(data); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Товарищи помогите/подскажите. Как решить проблему с кодировкой, функция возвращает вот такие кракозябры
2024.08.27 17:08:24.455 test EURUSD,H1: њN …Ђ)