powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / [DllImport("kernel32.dll", SetLastError = true)] FormatMessage работает некоректно
1 сообщений из 1, страница 1 из 1
[DllImport("kernel32.dll", SetLastError = true)] FormatMessage работает некоректно
    #38773963
Aleks Eustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.
Мне необходимо отформатировать строку, используя Windows CE FormatMessage.
Для теста использую следующий код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        [Test]
        public void Test()
        {
            String sourceMessage = "Операционная система не может запустить %1";
            StringBuilder formattedMessage = new StringBuilder();
            string[] args = new string[] {"a"};
            const uint FORMAT_MESSAGE_FROM_STRING = 0x00000400;
            IntPtr lpSource = Marshal.StringToHGlobalUni(sourceMessage);
            String res = Marshal.PtrToStringAuto(lpSource);
            uint dwChars = FormatMessage(
                    FORMAT_MESSAGE_FROM_STRING,
                    lpSource,
                    0,
                    0, 
                    formattedMessage,
                    256 * 256,
                    args);
        }


Теоретически результат форматирования должен быть записан в formattedMessage, но нормального результата я получить не могу. Я пытался использовать FormatMessage с разными сигнатурами:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        [DllImport("kernel32.dll")]
        static extern uint FormatMessage(uint dwFlags, IntPtr lpSource,
           uint dwMessageId, uint dwLanguageId, [Out] StringBuilder lpBuffer,
           uint nSize, IntPtr Arguments);

        // the version, the sample is built upon:
        [DllImport("Kernel32.dll", SetLastError = true)]
        static extern uint FormatMessage(uint dwFlags, IntPtr lpSource,
           uint dwMessageId, uint dwLanguageId, ref IntPtr lpBuffer,
           uint nSize, IntPtr pArguments);

        // the parameters can also be passed as a string array:
        [DllImport("Kernel32.dll", SetLastError = true)]
        static extern uint FormatMessage(uint dwFlags, IntPtr lpSource,
           uint dwMessageId, uint dwLanguageId, ref IntPtr lpBuffer,
           uint nSize, string[] Arguments);


Но нигде нормального результата не получил.
Теоретически при входящей строке:
"The operating system can not run %1"
я должен получить:
"The operating system can not run a".
Но вместо этого получаю строку со случайными значениями или пустую строку.
Подскажите, что я делаю не так?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / [DllImport("kernel32.dll", SetLastError = true)] FormatMessage работает некоректно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]