从托管代码访问 GetConsoleHistoryInfo()



我有一个模糊的Java背景,刚刚安装了Visual Studio Community 2015。玩弄它,所以启动并运行控制台应用程序,并希望在附加到其他控制台后使用上述功能。麻烦的是我不知道这个函数的适当声明 - 有人可以告诉我在这种情况下它应该是什么,但将来对我来说也是一个很好的指针,所以我可以自己解决它。IDE似乎没有多大帮助

using System.Runtime.InteropServices;
namespace ConsoleStuff
{
    class Program
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool GetConsoleHistoryInfo();
        static void Main(string[] args)
        {
                    GetConsoleHistoryInfo(); // <-- PInvokeStackImbalance occurred
        }
    }
}

你应该这样声明它:

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool GetConsoleHistoryInfo(ref CONSOLE_HISTORY_INFO ConsoleHistoryInfo);

您还需要 CONSOLE_HISTORY_INFO 类型才能正常工作:

[StructLayout(LayoutKind.Sequential)]
public struct CONSOLE_HISTORY_INFO
{
    uint cbSize;
    uint HistoryBufferSize;
    uint NumberOfHistoryBuffers;
    uint dwFlags;
} 

许多有用的信息可以在 PInvoke.net 找到。但是,您应该根据 MSDN 仔细检查它,看看它是否合适。

相关内容

  • 没有找到相关文章

最新更新