AllocConsole()不显示COUT(AllocConsole() not displayin

2019-07-22 07:59发布

我在哪里使用AllocConsole()和cout以用于调试目的的显示数据的DLL。
它用于正常工作,但因为我在我的编译器(的Visual Studio 2012)更新到最新的dll只显示控制台,但不是打印/ COUTS。
我出了主意的的,为什么发生这种情况。
有任何想法吗?

我的代码部分

__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;

但没有得到显示。

Answer 1:

我依稀记得,你可能需要将标准输出重定向到控制台。 我可能是错的(因为你有你的代码工作更早):

AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "This works" << std::endl;


Answer 2:

此工程采用vs2015与行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);


文章来源: AllocConsole() not displaying cout
标签: c++ dll