MetaTrader 4 Client Terminal build 646: Умный поиск, книги в Маркете и обновление окна параметров MQL4-программы - страница 28

 

Внутренняя функция

inline void err_dll_wchar_t(LPCWSTR sss)//(LPCWSTR nnn) // // sss) // чёрный ящик для длл

{


//////////////////////////////определение времени и даты

//setlocale(LC_ALL, ".1251");

struct tm *local;

time_t t;

t = time(NULL);

local = localtime(&t);


ofstream fout("err_dll.txt", ios_base::app); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt


if (fout.is_open() == 1) //если файл открылся, то работаем

{

fout << "\n\n";

fout << "============================================================================================================\n";

fout << asctime(local);

fout << sss << "\n"; // запись строки в файл

fout << "============================================================================================================\n";

fout << "\n\n";

fout.close(); // закрываем файл

}

else

{

ofstream fout("err_dll.txt.txt");

fout << "start\n";

fout.close();

}


}


Это её экспорт

extern "C" __declspec(dllexport) void test_string(LPCWSTR nnn)//(LPCWSTR nnn) // //

{


err_dll_wchar_t(nnn);

}



Результат.

09F5830C

09F5830C

А должно быть

test_string("Старт загрузки параметров"); - это вызов функции из mql

 
Henry_White:

"Доктор, меня все игнорируют!..." (с)

Постов 10 назад (https://www.mql5.com/ru/forum/151351/page20#966535) я писал про проблемы с передачей параметров UNICODE-овских строк в импортированных функциях. Например, 
 int res= kernel32::GetPrivateProfileStringW(SectionName, KeyName, Default, Buffer, nSize, FileName);

Эта строчка работает только в режиме отладки. В обычном режиме исполнения не работает. В предыдущем билде все работает.
 


Это претензия ко мне?)) У меня пол советника не пашет из за этого грёбанного юникода. Мне он нужен во всех режимах и в тесте и в работе. 
 

aleksandr25, Вы бы с кодировкой разобрались. Параметр юникодовый, а выводите, как ANSI. Конечно, работать не будет.

Ещё научитесь код вставлять в сообщения (SRC).

 

Исправили константы и возвращаемые коды причины деинициализации.

Спасибо.

Отдельное спасибо за то, что это не стало истиной:

mql5:
Поясните, что не так?

Встроенный макрос REASON_INITFAILED имеет значение 9

чего я опасался.

Единственное, что мне не удалось, - это получить REASON_CLOSE. При закрытии терминала получаю REASON_CHARTCLOSE.

 
Zhunko:

aleksandr25, Вы бы с кодировкой разобрались. Параметр юникодовый, а выводите, как ANSI. Конечно, работать не будет.

Ещё научитесь код вставлять в сообщения (SRC).


Если по нормальному делать а не через жо.., то хотите ввести ненужный никому юникод, вводите, но как новый тип, чтобы старые проги продолжали нормально работать.
 
Zhunko:

aleksandr25, Вы бы с кодировкой разобрались. Параметр юникодовый, а выводите, как ANSI. Конечно, работать не будет.

Ещё научитесь код вставлять в сообщения (SRC).


Какой тип приходит в функцию при данной схеме? char[] или strihg? Как эту строку использовать?
 
aleksandr25:

Если по нормальному делать а не через жо.., то хотите ввести ненужный никому юникод, вводите, но как новый тип, чтобы старые проги продолжали нормально работать.
aleksandr25:

Друг, спасибо за ссыль, но там столько букаф, что мне не хочется это читать)). Я програмер-любитель, мне изучать это всё означает забить на трейдинг).
В MQL4 теперь есть функция преобразования кодировки. DLL переделывать не надо.
 
aleksandr25:

Какой тип приходит в функцию при данной схеме? char[] или strihg? Как эту строку использовать?
В функцию приходит указатель на строку с широкими символами (WCHAR). Дальше надо использовать функции, которые могут принимать такую строку или преобразовать её в ANSI в самой функции или до функции в MQL4. В последнем случае параметр будет являться указателем на ANSI-строку (CHAR). 
Причина обращения: