gpt4 book ai didi

c++ - 如何在 C/C++ 中打印带下划线的文本?

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:09 25 4
gpt4 key购买 nike

我正在编写一个应用程序,想要打印带下划线的文本。我做错了什么?

我正在使用来自 C# 的“翻译”代码,通常它在 C# 中运行良好,但在 C++ 中却不行。修复错误后,代码根本无法运行。它显示了一些通常不会显示的字符。这是它打印的内容 ( https://i.imgur.com/V1X2uWk.png )

这是我使用的代码

auto DllHandler = GetStdHandle(-11);
unsigned int Mode;
GetConsoleMode(DllHandler,PDWORD(Mode));
Mode |= 4;
SetConsoleMode(DllHandler,DWORD(Mode));
cout << "\x1b[5mUnderlined \x1b[0mtext" << endl;

这是原始 (C#) 代码:

    [DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll")]
public static extern IntPtr GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
[DllImport("kernel32.dll")]
public static extern IntPtr SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
var DllHandler = Kernel32.GetStdHandle(-11);
uint Mode;
GetConsoleMode(DllHandler,out Mode);
Mode |= 4;
SetConsoleMode(DllHandler, Mode);
Console.Write("\x1b[5mUnderlined \x1b[0mText");

提前致谢。

最佳答案

正如@RbMm所说,使用ULONG类型可以编译成功,达到预期效果。

但真正的错误原因是指针传递错误。如果要使用unsigned int,首先要申请指针并为指针分配内存,然后在GetConsoleMode中强制进行类型转换。

    auto DllHandler = GetStdHandle(-11);
unsigned int *Mode = new unsigned int;
GetConsoleMode(DllHandler, PDWORD(Mode));
*Mode = *Mode | 4;
SetConsoleMode(DllHandler, DWORD(*Mode));
cout << "\x1b[4mUnderlined \x1b[4mtext" << endl;

delete Mode;

关于c++ - 如何在 C/C++ 中打印带下划线的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313131/

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