dll не должна иметь доступа к консоли, к консоли имеют доступ приложения запущенные из консоли
т.е. нужно из dll сначала запустить консоль, получить к ней доступ и потом лишь писать туда что-нибудь
мутно все это, сделайте лучше окошко WinForms из dll и пишите туда что вздумается
ЗЫ: под МТ5 не сложно, за 10 минут написал на работе вывод в лог на C# https://www.mql5.com/ru/forum/329730/page2#comment_14471168
ЗЫЗЫ: с МТ4 эти задачи много стоят, сколько раз делал свои хотелки, то что делаешь под МТ5 за час - два, ну за день может, под МТ4 уже готовый проект под 32 сконвертировать.... всегда что то начинается не так, и времени уходит столько же сколько с нуля писал
Всем привет. А как сделать так, чтобы когда я из MQL4 вызываю dll на C++, срабатывал cout из этой dll в консоли. В общем мне нужно выводить сообщение в консоль
в своей-же DLL перенаправить вывод cout/cerr в отдельные файлы, а на уровне MQL (например индикатором) эти файлы читать и с@ать в консоль.
Кому повезло осилить Linux могут воспользоваться tail -f чтобы видеть итог
насколько понимаю (не силён в WinAPI) дескрипторы 0 1 2 закрываются вот прямо сразу и не наследуются или сливаются в nul . И то что видится в журнале -
это не вывод cout, это результат вызова отдельных функций платформы
Всем привет. А как сделать так, чтобы когда я из MQL4 вызываю dll на C++, срабатывал cout из этой dll в консоли. В общем мне нужно выводить сообщение в консоль
AllocConsole(), ну и дальше в msdn читай как с этим работать
прогуглил, действительно не сложно на C++
#include "stdafx.h" #include "testdll.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } HANDLE hOut=NULL; extern "C" { __declspec(dllexport) void CreateConsole() { if(hOut==NULL) { AllocConsole(); hOut = GetStdHandle(STD_OUTPUT_HANDLE); } } __declspec(dllexport) void DestroyConsole() { if(hOut!=NULL) { FreeConsole(); hOut = NULL; } } __declspec(dllexport) void PrintOnConsole(char *pTxt) { DWORD NumberOfCharsWritten; WriteConsole(hOut, pTxt,lstrlen(pTxt),&NumberOfCharsWritten, NULL); } }
вызов
#include "stdafx.h" extern "C" __declspec(dllimport) void PrintOnConsole(char *pTxt); extern "C" __declspec(dllexport) void CreateConsole(); extern "C" __declspec(dllexport) void DestroyConsole(); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { CreateConsole(); PrintOnConsole("TEST"); MessageBox(NULL,"Console test","Console test",MB_OK); DestroyConsole(); return 0; }
как говорится, удивительное рядом )))

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования