[英]AllocConsole not printing when in Visual Studio
I want to create a console window and print some info on it when debugging my program. 我想在调试程序时创建一个控制台窗口并在其上打印一些信息。 VS 2010 does not give me the option of setting different Output types for my program depending on whether its in debug or release mode, so I resorted to creating a Console window manually like so:
VS 2010没有为我提供为程序设置不同输出类型的选项,具体取决于它是处于调试模式还是发布模式,因此我采用手动创建控制台窗口,如下所示:
[DllImport("kernel32.dll")]
public static extern Int32 AllocConsole();
static void Main()
{
#if DEBUG
AllocConsole();
#endif
....
That pops open a console window, but nothing gets written to it. 弹出窗口打开一个控制台窗口,但没有任何内容写入它。 I tried a bunch of other pinvoke (AttachConsole etc...) that did nothing.
我尝试了一堆其他的pinvoke(AttachConsole等......)什么也没做。 Then I finally tried running the application outside of Visual Studio, and the Console Window worked.
然后我终于尝试在Visual Studio之外运行应用程序,并且控制台窗口工作。 Apparently Visual Studio is eating up all my Console.WriteLines!
显然Visual Studio正在吃掉我所有的Console.WriteLines!
How can I fix this? 我怎样才能解决这个问题?
Having encountered the same issue, here is some code that appears to restore console output for me after the call to AllocConsole
: 遇到同样的问题,这里有一些代码,在调用
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/Invokes as follows: P / Invokes如下:
[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;
I got the same issue. 我遇到了同样的问题。 Turns out writing to the console works in visual studio only when debugging in hosted process.
只有在托管进程中进行调试时,才能在visual studio中编写控件。 Go to Project Properties -> Debug -> Enable Debuggers and make sure 'Enable Visual Studio hosting process' is checked.
转到项目属性 - >调试 - >启用调试器,并确保选中“启用Visual Studio主机进程”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.