Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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
Цитата LiquidStorm @
Собственно нужно найти аналог функции Format

Просто юзай 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
Спасибо за ответы.
Цитата volvo877 @
Ну, так она же объявлена в Windows.pas ...
угу, только из объявления
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    function wsprintf(Output: PChar; Format: PChar): Integer; stdcall;
непонятно, как же ей параметры передать - есть только указатель на результат и указатель на строку с форматом.

Цитата jack128 @
Очередная борьба за пару десятков кило на винте??? Ну-ну...
В данном случае Вы ошибаетесь, задача не уменьшить размер, а сделать код некоторых процедур WinAPI/NativeAPI only ;)

Цитата Krid @
Просто юзай C-runtime (MSVCRT.DLL).
Спасибо, попробую.

Еще попутно вопрос - в 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
Большое спасибо за помощь

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)