Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 暂时禁用来自第三方dll的控制台输出_C++_Console - Fatal编程技术网

C++ 暂时禁用来自第三方dll的控制台输出

C++ 暂时禁用来自第三方dll的控制台输出,c++,console,C++,Console,我有一个WIN 32控制台应用程序,它使用第三方dll的功能,我没有源代码。当从这个特定的dll调用导出函数时,我的控制台中充满了来自导出方法的消息 有没有办法禁用第三方dll的控制台输出“本地化”?当然,原始的dll“loader”进程(我的应用程序)必须仍然能够提供控制台输出,因为需要解释控制台的客户端脚本工具包将其作为子进程调用。所以您可以想象,如果我将不受控制的控制台输出传递给这个父进程,事情可能会出错 我试过这篇文章的答案: 这样地: 系统(“3rdparty.dll>nul 2>nu

我有一个WIN 32控制台应用程序,它使用第三方dll的功能,我没有源代码。当从这个特定的dll调用导出函数时,我的控制台中充满了来自导出方法的消息

有没有办法禁用第三方dll的控制台输出“本地化”?当然,原始的dll“loader”进程(我的应用程序)必须仍然能够提供控制台输出,因为需要解释控制台的客户端脚本工具包将其作为子进程调用。所以您可以想象,如果我将不受控制的控制台输出传递给这个父进程,事情可能会出错

我试过这篇文章的答案: 这样地:
系统(“3rdparty.dll>nul 2>nul”)

但是它不起任何作用。

您可以在调用第三方库之前将
stdout
stderr
重定向到一个文件,然后再将它们重定向回第三方库

你可以编写这样的类:(这是Windows和Visual C++的。其他更多的POSIX类环境需要稍微不同的代码) 还要记住,您需要同时包含

上述类将
stdout
stderr
重定向到其构造函数中的普通文件,并在其析构函数中还原它们。您可以这样使用它:

// This function writes stuff to the console:
void Foo (int i)
{
    printf ("(%d) Hello, world!\n", i);
    fprintf (stderr, "(%d) Hello, again.\n", i);
}

// ... 
// Later, you call the Foo() function three times, but only the
// second one is redirected:
Foo (0);

{
    RedirectStandardOutputs rso ("x.txt", "y.txt");
    Foo (1);
}

Foo (2);
请注意,这可能不是很快(特别是在Windows上),因此请将其放在性能敏感区域之外

如果您想禁用对控制台的写入,而不仅仅是将它们重定向到文本文件,您仍然可以使用这种方法,但您必须为文件名传入字符串
“NUL”
,即:

RedirectStandardOutputs rso ("NUL", "NUL");
希望这有帮助

RedirectStandardOutputs rso ("NUL", "NUL");