gpt4 book ai didi

c# - Release模式下 Console.SetOut 的问题?

转载 作者:可可西里 更新时间:2023-11-01 08:12:26 25 4
gpt4 key购买 nike

我的代码中有一堆 Console.WriteLines,我可以在运行时观察它们。我与我也编写的 native 库进行通信。

我想在 native 库中添加一些 printf 并观察它们。但是我在运行时看不到它们。

我创建了一个复杂的 hello world 应用程序来演示我的问题。当应用程序运行时,我可以调试到 native 库并看到调用了 hello world。但是,输出永远不会出现在文本编写器中。请注意,如果相同的代码作为控制台应用程序运行,则一切正常。

C#:

    [DllImport("native.dll")]
static extern void Test();

StreamWriter writer;

public Form1()
{
InitializeComponent();

writer = new StreamWriter(@"c:\output.txt");
writer.AutoFlush = true;
System.Console.SetOut(writer);
}

private void button1_Click(object sender, EventArgs e)
{
Test();
}

和原生部分:

__declspec(dllexport) void Test()
{
printf("Hello World");
}

更新:下面的 hamishmcn 开始谈论调试/发布版本。我删除了上述 button1_click 方法中的 native 调用,并将其替换为标准的 Console.WriteLine .net 调用。当我在 Debug模式下编译和运行它时,消息被重定向到输出文件。然而,当我切换到 Release模式时,调用没有被重定向。控制台重定向似乎只在 Debug模式下有效。我该如何解决这个问题?

最佳答案

也许出于某种原因,您的本地库不知道控制台。
您可以尝试调用 GetConsole查看是否返回句柄。如果不是,您可以尝试分配自己的 console看看是否有效。
祝你好运! :-)


更新:
我也写了一个示例应用程序(调用 native C++ dll 的控制台 C# 应用程序),并且 C# Console.WriteLine 和 native printf 都出现在控制台上...那么我们缺少什么?
您是否总是在 Debug模式下运行它 - 如果您在 Release模式下运行它,您是否看到控制台窗口?
更新 2:
抱歉,我应该说我在控制台上看到了文本,但是如果我将控制台输出设置为 StreamWriter,就像您在示例中所做的那样,那么只有 WriteConsole 文本会转到输出文件,printfs 仍然去屏幕

关于c# - Release模式下 Console.SetOut 的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2646434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com