Я реализовал DLL (C++, VisualStudio, Windows), расширяющую функции другой программы (далее - основная программа).
Внутреннюю архитектуру я не знаю основная программа, за исключением того, что это программа с графическим интерфейсом и сама не использует консольные окна.
DLL создает консольное окно и использует его для вывода вывода в целях отладки (std::cout/ wcout).
Взаимодействие DLL и основной программы происходит через некоторые экспортированные функции в DLL. Взаимодействие работает хорошо, но в ряде случаев основные программы выходят из строя. В некоторых случаях это происходит, когда я просто закрываю окно консоли, нажав "x".
Вопрос: видите ли вы какие-либо потенциальные риски использования окна консоли с помощью DLL, и следует ли мне закрывать ее? окно консоли, когда функции DLL завершают работу? Может быть, вы видите в такой схеме явное нарушение дисциплины работы с консолью?
Код создания и закрытия окна консоли:
bool CreateConsole() {
HWND ConsoleWindowHandle = GetConsoleWindow();
if (ConsoleWindowHandle != NULL)
// console ia already created
return true;
BOOL res = AllocConsole();
if (res == 0) {
DWORD LastError = GetLastError();
return false;
}
freopen_s(&ConsoleStream, "CONOUT$", "w", stdout);
setlocale(LC_ALL, "...");
return true;
}
void CloseConsole() {
BOOL ok = FreeConsole();
ConsoleWindowHandle = 0;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... gging-aims