gpt4 book ai didi

c# - 在 Visual Studio 中时 AllocConsole 不打印

转载 作者:行者123 更新时间:2023-11-30 19:43:17 33 4
gpt4 key购买 nike

我想创建一个控制台窗口并在调试我的程序时在上面打印一些信息。 VS 2010 没有给我设置不同输出类型的选项,具体取决于它是处于 Debug模式还是 Release模式,所以我求助于手动创建一个控制台窗口,如下所示:

[DllImport("kernel32.dll")]
public static extern Int32 AllocConsole();

static void Main()
{
#if DEBUG
AllocConsole();
#endif
....

这会弹出一个控制台窗口,但不会向其中写入任何内容。我尝试了一堆其他的 pinvoke(AttachConsole 等)但什么也没做。然后我终于尝试在 Visual Studio 之外运行该应用程序,并且控制台窗口工作了。显然 Visual Studio 正在吃掉我所有的 Console.WriteLines!

我该如何解决这个问题?

最佳答案

遇到同样的问题,这里有一些代码似乎可以在调用 AllocConsole 后为我恢复控制台输出:

    private static void OverrideRedirection()
{
var hOut = GetStdHandle(STD_OUTPUT_HANDLE);
var hRealOut = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE, FileShare.Write, IntPtr.Zero, FileMode.OpenOrCreate, 0, IntPtr.Zero);
if (hRealOut != hOut)
{
SetStdHandle(STD_OUTPUT_HANDLE, hRealOut);
Console.SetOut(new StreamWriter(Console.OpenStandardOutput(), Console.OutputEncoding) { AutoFlush = true });
}
}

P/调用如下:

    [DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetStdHandle(int nStdHandle);

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetStdHandle(int nStdHandle, IntPtr hHandle);

public const int STD_OUTPUT_HANDLE = -11;
public const int STD_INPUT_HANDLE = -10;
public const int STD_ERROR_HANDLE = -12;

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr CreateFile([MarshalAs(UnmanagedType.LPTStr)] string filename,
[MarshalAs(UnmanagedType.U4)] uint access,
[MarshalAs(UnmanagedType.U4)] FileShare share,
IntPtr securityAttributes,
[MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes,
IntPtr templateFile);

public const uint GENERIC_WRITE = 0x40000000;
public const uint GENERIC_READ = 0x80000000;

关于c# - 在 Visual Studio 中时 AllocConsole 不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15578540/

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