我正在编码一个应用程序,并希望打印带下划线的文本。我在做什么错了?
我正在使用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");
谢谢。
答案 0 :(得分:0)
就像@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;