小编Ser*_*eev的帖子

从重定向的 STDOUT 读取 Unicode(C++、Win32 API、Qt)

我有一个动态加载插件 DLL 的 C++ 应用程序。DLL 通过 std::cout 和 std::wcout 发送文本输出。基于 Qt 的 UI 必须从 DLL 获取所有文本输出并显示它。流缓冲区替换的方法并不完全有效,因为由于运行时库的差异,DLL 可能具有不同的 cout/wcout 实例。因此,我应用了 Windows 特定的 STDOUT 重定向,如下所示:

StreamReader::StreamReader(QObject *parent) :
    QThread(parent)
{
    // void
}

void StreamReader::cleanUp()
{
    // restore stdout
    SetStdHandle (STD_OUTPUT_HANDLE, oldStdoutHandle);

    CloseHandle(stdoutRead);
    CloseHandle(stdoutWrite);
    CloseHandle (oldStdoutHandle);

    hConHandle = -1;

    initDone = false;
}

bool StreamReader::setUp()
{

    if (initDone)
    {
        if (this->isRunning())
            return true;
        else
            cleanUp();
    }

    do
    {
        // save stdout
        oldStdoutHandle = ::GetStdHandle (STD_OUTPUT_HANDLE);

        if (INVALID_HANDLE_VALUE == oldStdoutHandle)
            break;

        if (0 …
Run Code Online (Sandbox Code Playgroud)

c++ winapi qt runtime

5
推荐指数
1
解决办法
2270
查看次数

标签 统计

c++ ×1

qt ×1

runtime ×1

winapi ×1