Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Delphi: Система, Windows API > WinAPI аналог функции Format() |
Автор: LiquidStorm 22.09.06, 09:48 |
Собственно нужно найти аналог функции Format(const Format: string; const Args: array of const): string; на WinAPI с аргументами типа PChar или PWideChar. |
Автор: volvo877 22.09.06, 10:45 |
wsprintf ? |
Автор: LiquidStorm 22.09.06, 15:30 |
Спасибо. А как ее правильно объявить? |
Автор: volvo877 22.09.06, 15:58 |
Ну, так она же объявлена в Windows.pas ... |
Автор: jack128 22.09.06, 19:16 |
Очередная борьба за пару десятков кило на винте??? Ну-ну... |
Автор: Krid 23.09.06, 03:03 |
Просто юзай C-runtime (MSVCRT.DLL). Она входит в поставку винды, начиная с Windows 95 OSR2. Ее использует Explorer, так что она постоянно в памяти висит. Только не забудь про cdecl и varargs. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> uses windows; function sprintf(buf:pchar;format:pchar):integer; cdecl varargs; external 'MSVCRT.DLL'; var buf:array[0..MAX_PATH-1] of char; begin sprintf(buf,'Integer = %d, Hex = %Xh, String = %s',123,123,'aaa'); MessageBox(0,buf,'Delphi sprintf',0); end. |
Автор: LiquidStorm 25.09.06, 10:12 |
Спасибо за ответы. угу, только из объявления <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> непонятно, как же ей параметры передать - есть только указатель на результат и указатель на строку с форматом.function wsprintf(Output: PChar; Format: PChar): Integer; stdcall; В данном случае Вы ошибаетесь, задача не уменьшить размер, а сделать код некоторых процедур WinAPI/NativeAPI only Спасибо, попробую. Еще попутно вопрос - в ntdll.dll есть функция sprintf - не подскажите как ее правильно объявить. |
Автор: Krid 27.09.06, 10:06 |
Цитата LiquidStorm @ Еще попутно вопрос - в ntdll.dll есть функция sprintf - не подскажите как ее правильно объявить. Точно так же: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> uses Windows; function sprintf(buf:pchar;format:pchar):integer; cdecl varargs; external 'NTDLL.DLL'; var buf:array[0..MAX_PATH-1] of char; begin sprintf(buf,'Integer = %d, Hex = %Xh, String = %s',123,123,'aaa'); MessageBox(0,buf,'Delphi sprintf',0); end. |
Автор: LiquidStorm 27.09.06, 10:35 |
Большое спасибо за помощь |