将STDIN与AllocConsole()一起使用
Using STDIN with an AllocConsole()
我有一个第三方dll,我将其加载到不是我的软件中,并且我正在使用AllocConsole()创建标准的windows CLI窗口,因此我可以轻松地输出调试消息。
不过,我的问题是,它忽略了任何类型的输入。我只想能够使用我分配的控制台,并使我能够给它一些输入。
多亏了Ben Voigt,我能够在分配后让控制台接受输入,方法是:
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
这还将stdout和strerr定向到同一控制台窗口,以防它们由于某种原因被定向到其他地方。
这就是我使用的。
FILE *file = nullptr;
freopen_s(&file,"CONIN$", "r", stdin);
freopen_s(&file, "CONOUT$", "w", stdout);
只是希望这能帮助到别人。
是否也将stdout
和stderr
重定向到控制台?
我使用这段代码来访问Windows应用程序的JavaVM输出。
if(::AllocConsole())
{
int hCrt = ::_open_osfhandle((intptr_t) ::GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
FILE *hf = ::_fdopen( hCrt, "w" );
*stdout = *hf;
::setvbuf(stdout, NULL, _IONBF, 0 );
hCrt = ::_open_osfhandle((intptr_t) ::GetStdHandle(STD_ERROR_HANDLE), _O_TEXT);
hf = ::_fdopen( hCrt, "w" );
*stderr = *hf;
::setvbuf(stderr, NULL, _IONBF, 0 );
}
在此之后,我可以看到来自VM的所有stdout
和stderr
输出。
这是适用于我的代码:
freopen("CONOUT$", "w", stdout);
您可能可以对CONIN$
和stdin
执行类似的操作(当然是开放阅读)。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 将STDIN与AllocConsole()一起使用
- 如何在C++中实现grep,使其与管道(stdin等)一起工作