На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> WinAPI аналог функции Format()
    Собственно нужно найти аналог функции Format(const Format: string; const Args: array of const): string; на WinAPI с аргументами типа PChar или PWideChar.
        Спасибо. А как ее правильно объявить?
          Ну, так она же объявлена в Windows.pas ...
            Очередная борьба за пару десятков кило на винте??? Ну-ну...
              Цитата LiquidStorm @
              Собственно нужно найти аналог функции Format

              Просто юзай C-runtime (MSVCRT.DLL). Она входит в поставку винды, начиная с Windows 95 OSR2. Ее использует Explorer, так что она постоянно в памяти висит. Только не забудь про cdecl и varargs.

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

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

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

                Еще попутно вопрос - в ntdll.dll есть функция sprintf - не подскажите как ее правильно объявить.
                  Цитата LiquidStorm @
                  Еще попутно вопрос - в ntdll.dll есть функция sprintf - не подскажите как ее правильно объявить.

                  Точно так же:
                  ExpandedWrap disabled
                    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.
                    Большое спасибо за помощь
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0315 ]   [ 16 queries used ]   [ Generated: 27.04.24, 14:00 GMT ]