相关疑难解决方法(0)

AllocConsole()不显示cout

我有一个DLL,我使用AllocConsole()和cout来显示数据以进行调试.
它曾经工作正常但是因为我将我的编译器(Visual Studio 2012)更新到最新的dll只显示控制台而不是print/couts.
我不明白为什么会发生这种情况.
有任何想法吗?

我的部分代码

__declspec(dllexport) INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
{
    switch(Reason)
    {
    case DLL_PROCESS_ATTACH:    
        AllocConsole();

        DisableThreadLibraryCalls(hDLL);

        //
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)pSend, MySend);
        if(DetourTransactionCommit() == NO_ERROR)
             cout << "[" << MySend << "] successfully detoured." << endl;
Run Code Online (Sandbox Code Playgroud)

但是什么都没有显示

c++ dll

28
推荐指数
3
解决办法
4万
查看次数

将函数输出重定向到/ dev/null

我正在使用正在向cout或打印警告消息的库cerr.我不希望此警告消息到达我的程序的输出.如何捕获此输出并将其输入/dev/null或类似?

MWE:

#include <iostream>

void foo()
{
    std::cout << "Boring message. " << std::endl;
};

int main()
{
    foo();
    std::cout << "Interesting message." << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Interesting message.
Run Code Online (Sandbox Code Playgroud)

main该如何修改以获得所需的输出?(foo不得更改.)


我尝试使用freopen()fclose(stdout)按照此问题中的建议如何将stdout重定向到Windows应用程序中的某些可见显示?.结果是没有打印任何内容.

c++ stdout

19
推荐指数
3
解决办法
1万
查看次数

"printf"在Windows非控制台应用程序中写入的位置?

如果我选择创建一个Windows非控制台应用程序,并printf\cout在代码中实现,那么printf\cout写在哪里?它写入stdout缓冲区吗?如果是的话,无论如何都要从中读取它stdout并将其打印到某个文本文件中或者MessageBox使用文本进行读取(只是为了验证我是否正确读取了它)?

编辑::只是为了澄清我不想将输出重定向到任何地方.我想知道,printf/cout写在哪里?如果它写入某个默认缓冲区,是否有办法读取输出,只是为了验证我已经从正确的缓冲区读取了正确的输出.请不要给我重定向"stdout"的解决方案.

c c++ winapi stdout visual-c++

19
推荐指数
2
解决办法
7731
查看次数

如何关闭libavformat错误消息

默认情况下,libavformat将错误消息写入stderr,如:

Estimating duration from bitrate, this may be inaccurate

我怎么能把它关掉?或者更好的是,把它管道到我自己的整洁记录功能?

编辑:将stderr重定向到其他地方是不可接受的,因为我需要它用于其他日志记录目的,我只是希望libavformat不写入它.

c ffmpeg libavcodec libav libavformat

9
推荐指数
3
解决办法
5726
查看次数

在C++中将所有程序输出写入txt文件

我需要将所有程序输出写入文本文件.我相信它是这样做的,

sOutFile << stdout;
Run Code Online (Sandbox Code Playgroud)

其中sOutFile是创建文件的ofstream对象,如下所示:

sOutFile("CreateAFile.txt" ); // CreateAFile.txt is created.
Run Code Online (Sandbox Code Playgroud)

当我将stdout插入sOutFile对象时,我得到一些似乎相似的代码 八进制 [十六进制]代码或我创建的文本文件中的某种地址.

0x77c5fca0
Run Code Online (Sandbox Code Playgroud)

但令我困惑的是,在我的程序中,我多次使用cout.主要是文字陈述.如果我没弄错那就是程序输出.

如果此代码是地址,它是否包含我的所有输出?我可以把它读回到程序中并找到那个方法吗?

如何将我的所有程序输出写入文本文件?

c++ file-io

8
推荐指数
3
解决办法
3万
查看次数

使用"cout" - C++在Windows对话框中显示消息

可以使用cout语法显示Windows消息框吗?

我还需要压缩/隐藏命令提示符窗口.

有一些方法可以调用消息框功能并通过其用法显示文本,但这里的主要约束是必须使用cout语法.

cout <<  "message";
Run Code Online (Sandbox Code Playgroud)

我想在cout输出中调用VB msgbox命令,但找不到任何有用的东西.

有任何想法吗?

c++ windows cout messagebox

4
推荐指数
4
解决办法
2万
查看次数

QtScript输出重定向

当我调用此代码时:

QScriptEngine e;
e.evaluate("print('hello, world!')");
Run Code Online (Sandbox Code Playgroud)

输出文本(来自print方法)写入主应用程序的终端.

有没有办法将其重定向到自定义QIODevice?

c++ qt qtscript

4
推荐指数
1
解决办法
1663
查看次数

尝试在 Windows 上重定向 stdout 和 stderr - _fileno(stdout) 返回 -2

这是我在这里的第一个问题!

我即将将一些工作良好的 C++ 代码从 UNIX 移植到 Windows,它通过管道将 stdout 和 stderr 重定向到自定义 GUI 组件。我需要它来显示来自第三方库的反馈,该库仅将消息输出到我的 GUI 上的 stdout。

根据这个答案/sf/answers/43201091/这应该有效。事实上,链接中的代码在使用 Visual Studio 2017 构建的新命令行应用程序中按预期工作。但是在我现有的 GUI 应用程序中,对 的调用_fileno(stdout)以及对_fileno(stderr)两者的调用都返回 -2 而不是预期值 1 和 2,所以只需什么都没有发生。对相关函数进行硬编码 1 和 2 也不起作用。

所以谁能解释一下

  • 返回值 -2 究竟意味着什么?(谷歌搜索了很多 - 没有成功)
  • 如果甚至有可能在没有控制台的应用程序中实现我想要的 Windows 应用程序?
  • 如果可能的话,让它工作的相关步骤是什么?

供您参考,我收集了迄今为止在 Linux 和 Mac OS 上编程的主要经验,因此对于经验丰富的 Windows 人员来说,这可能是显而易见的。GUI 应用程序基于 JUCE 框架,因此我使用的是由 JUCE 工具 Projucer 创建的自动生成的 Visual Studio 项目

c++ windows pipe

4
推荐指数
1
解决办法
1955
查看次数

标签 统计

c++ ×7

c ×2

stdout ×2

windows ×2

cout ×1

dll ×1

ffmpeg ×1

file-io ×1

libav ×1

libavcodec ×1

libavformat ×1

messagebox ×1

pipe ×1

qt ×1

qtscript ×1

visual-c++ ×1

winapi ×1