簡體   English   中英

AllocConsole在Visual Studio中不打印

[英]AllocConsole not printing when in Visual Studio

我想在調試程序時創建一個控制台窗口並在其上打印一些信息。 VS 2010沒有為我提供為程序設置不同輸出類型的選項,具體取決於它是處於調試模式還是發布模式,因此我采用手動創建控制台窗口,如下所示:

[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 / 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;

我遇到了同樣的問題。 只有在托管進程中進行調試時,才能在visual studio中編寫控件。 轉到項目屬性 - >調試 - >啟用調試器,並確保選中“啟用Visual Studio主機進程”。

正如我在此處所述,您可以嘗試以管理員身份運行VS. 這對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM