cout在链接器选项后停止工作

时间:2017-12-07 08:02:04

标签: c++ linker cout

我正在编写一个截取屏幕截图的C ++程序。我从here借用了屏幕截图功能并设置了一个链接选项-mwindows,就像网页提到的那样,然后发生了一些事情。设置链接器选项后,cout停止显示我的文本。

在设置链接器选项之前,这是我的代码:

#include <iostream>
#include <windows.h>
using namespace std; 

int main(int argc, char** argv) {
    cout << "test\n"; 

    while (true) {
        cout << "test2\n"; 
    }

    system("pause"); 
    return 0;
}

这是函数screenshot以及链接器选项-mwindows

void screenshot(POINT a, POINT b) {
    // copy screen to bitmap
    HDC     hScreen = GetDC(NULL);
    HDC     hDC     = CreateCompatibleDC(hScreen);
    HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, abs(b.x-a.x), abs(b.y-a.y));
    HGDIOBJ old_obj = SelectObject(hDC, hBitmap);
    BOOL    bRet    = BitBlt(hDC, 0, 0, abs(b.x-a.x), abs(b.y-a.y), hScreen, a.x, a.y, SRCCOPY);

    // save bitmap to clipboard
    OpenClipboard(NULL);
    EmptyClipboard();
    SetClipboardData(CF_BITMAP, hBitmap);
    CloseClipboard();

    // clean up
    SelectObject(hDC, old_obj);
    DeleteDC(hDC);
    ReleaseDC(NULL, hScreen);
    DeleteObject(hBitmap);
}

到目前为止我所知道的是,该计划运行良好,除了cout。

正确截取屏幕截图,无限循环正在运行,如果我添加它,通过fstream写文件也没问题。

如果我在任何地方调用屏幕截图或者从不调用它(但是声明了屏幕截图),事情就不会改变,cout仍然没有显示任何内容。

所以问题不在于screenshot功能。

如果删除无限循环,

system("pause")会显示其文本。

如果有人告诉我为什么链接器选项会阻止cout工作,那将会很有帮助。或者我以错误的方式使用链接器选项? (我认为这几乎是不可能的,因为screenshot函数完美运行)

我正在使用Dev-C ++ 5.11进行编码。我通过将-mwindows添加到项目选项&gt;来设置链接器选项。参数&gt;接头即可。

如果设置了链接器选项,我怎样才能让cout正常工作,这样我可以截取屏幕截图?任何信息,将不胜感激。 谢谢。

修改:根据我的进一步测试,printfcout具有相同的行为,在控制台上没有显示任何内容。

0 个答案:

没有答案