AllocConsole () n'affiche pas cout
J'ai une DLL où j'utilise AllocConsole () et cout pour afficher des données à des fins de débogage.
Cela fonctionnait bien, mais depuis que j'ai mis à jour mon compilateur (Visual Studio 2012) à la dernière version, la dll montre simplement la console mais pas les impressions/couts.
Je suis de l'idée du pourquoi de ce qui se passe.
Toute idée?
Partie de mon code
__declspec(dllexport) INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
{
switch(Reason)
{
case DLL_PROCESS_ATTACH:
AllocConsole();
DisableThreadLibraryCalls(hDLL);
//
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pSend, MySend);
if(DetourTransactionCommit() == NO_ERROR)
cout << "[" << MySend << "] successfully detoured." << endl;
Mais rien n'est affiché.
23
demandé sur
madziikoy
2013-03-21 13:24:27
2 réponses
Je me souviens vaguement que vous pourriez avoir besoin de rediriger le stdout vers la console. Je pourrais me tromper cependant (puisque votre code fonctionnait plus tôt):
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "This works" << std::endl;
53
répondu
Vladimir Sinenko
2013-03-21 12:34:56
Cela fonctionne en utilisant vs2015 avec la ligne std::cout.clear()
if (!AllocConsole())
MessageBox(NULL, L"The console window was not created", NULL, MB_ICONEXCLAMATION);
FILE* fp;
freopen_s(&fp, "CONOUT$", "w", stdout);
printf("Hello console on\n");
std::cout.clear();
std::cout << "Cout line one." << std::endl;
cout << "Cout line two." << std::endl;
MessageBox(NULL, (L"Pause to see console output."), (L"Pause Here"), MB_OK | MB_SYSTEMMODAL | MB_ICONEXCLAMATION);
fclose(fp);
if (!FreeConsole())
MessageBox(NULL, L"Failed to free the console!", NULL, MB_ICONEXCLAMATION);
2
répondu
Willy
2017-02-28 22:49:38