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