Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2014, 11:38   #1
Eustacce
 
Регистрация: 23.07.2014
Сообщений: 9
По умолчанию [DllImport("kernel32.dll", SetLastError = true)]

Всем доброго времени суток.
Мне необходимо отформатировать строку, используя Windows CE FormatMessage.
Для теста использую следующий код:
Код:
        [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 с разными сигнатурами:
Код:
        [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".
Но вместо этого получаю строку со случайными значениями или пустую строку.
Подскажите, что я делаю не так?
Eustacce вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
Не удается найти точку входа " " в DLL ".dll" Linore C# (си шарп) 0 13.10.2011 10:38
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Как "динамически" использовать "DLL" Air Общие вопросы Delphi 7 11.12.2007 21:55