创建成功的控制台窗口但cout不会在其上打印任何内容(visual studio enterprise 2015)

时间:2016-04-25 10:39:02

标签: c++ visual-studio

我创建了动态dll。 有趣的是,我将在visual studio 2010中构建相同的代码 工作正常,但在visual studio 2015上构建代码时,它不起作用。

#include <windows.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

#define EXP __declspec(dllexport)  __stdcall
using namespace std;

void SPGoConsole(int status);
void EXP ttest(int in)
{
    SPGoConsole(1);
    cout << "Hello world!" << endl;
}

void SPGoConsole(int status)
{
    if (status == 0)
    {
        FreeConsole();
        return;
    }
    int hConHandle;
    long lStdHandle;
    CONSOLE_SCREEN_BUFFER_INFO coninfo;
    FILE *fp;
    AllocConsole();
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
    coninfo.dwSize.Y = 1000;
    coninfo.dwSize.X = 1000;
    SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
    lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen(hConHandle, "w");
    *stdout = *fp;
    cout = fp;
    setvbuf(stdout, NULL, _IONBF, 0);
    lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen(hConHandle, "r");
    *stdin = *fp;
    setvbuf(stdin, NULL, _IONBF, 0);
    lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
    hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
    fp = _fdopen(hConHandle, "w");
    *stde

    rr = *fp;
    setvbuf(stderr, NULL, _IONBF, 0);
    ios::sync_with_stdio();
}

我没有在visual studio 2015中使用任何特殊设置。 一切都是默认的。

如果我愿意的话:

AllocConsole();

然后我的程序第一次导入dll并调用ttest,它不打印任何东西,但第二次它调用ttest它打印出Hello world!。

然后我尝试只调用AllocConsole 2x但直到它仍然没有打印 我的程序再次被称为ttest。

编辑:似乎在程序运行后导入第二个dll后,它开始打印。

Anyideas? 感谢

0 个答案:

没有答案