Как я могу напечатать подчеркнутый текст в C / C ++? - PullRequest
1 голос
/ 26 мая 2019

Я кодирую приложение и хочу напечатать подчеркнутый текст. Что я делаю не так?

Я использую «переведенный» код из 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");

Заранее спасибо.

1 Ответ

0 голосов
/ 27 мая 2019

Как и в случае @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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...