Что значит _(ф-ция)@16 в конце ф-ций?

Тема в разделе "WASM.BEGINNERS", создана пользователем Rihter, 14 апр 2006.

  1. Rihter

    Rihter New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2006
    Сообщения:
    76
    Помогите plz. сделать ф-ций такими как эта



    function MessageBoxA(hWnd: cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer; stdcall; external 'user32.dll' name '_MessageBoxA@16';









    function CreateFileA( {004} lpFileName: PAnsiChar;

    {008} dwDesiredAccess, dwShareMode: DWORD;

    {004} lpSecurityAttributes:Pointer {PSecurityAttributes};

    {008} dwCreationDisposition, dwFlagsAndAttributes: DWORD;

    {004} hTemplateFile: THandle)

    : THandle; stdcall; external 'kernel32.dll' name 'CreateFileA';



    { function ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD;

    var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; stdcall; external 'kernel32.dll';

    function SetFilePointer(hFile: THandle; lDistanceToMove: Longint;

    lpDistanceToMoveHigh: Pointer; dwMoveMethod: DWORD): DWORD; stdcall; external 'kernel32.dll';

    function CreateFileMappingA(hFile: THandle; lpFileMappingAttributes: PSecurityAttributes;

    flProtect, dwMaximumSizeHigh, dwMaximumSizeLow: DWORD; lpName: PAnsiChar): THandle; stdcall;

    external 'kernel32.dll';

    function FindFirstFileA(lpFileName: PAnsiChar; var lpFindFileData: TWIN32FindDataA): THandle;

    stdcall; external 'kernel32.dll';

    function FindNextFileA(hFindFile: THandle; var lpFindFileData: TWIN32FindDataA): BOOL;

    stdcall; external 'kernel32.dll';

    function FindClose(hFindFile: THandle): BOOL; stdcall; external 'kernel32.dll';

    function MapViewOfFile(hFileMappingObject: THandle; dwDesiredAccess: DWORD;

    dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap: DWORD): Pointer;

    stdcall; external 'kernel32.dll';

    function CloseHandle(hObject: THandle): BOOL; stdcall; external 'kernel32.dll';

    function UnmapViewOfFile(lpBaseAddress: Pointer): BOOL; stdcall; external 'kernel32.dll';

    function GetFileSize(hFile: THandle; lpFileSizeHigh: Pointer): DWORD; stdcall; external 'kernel32.dll';

    function LoadLibraryA(lpLibFileName: PAnsiChar): HMODULE; stdcall; external 'kernel32.dll';

    }
     
  2. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Если честно, до конца не понял что именно тебе нужно, если тебя интересует ...@16 и что это значит, то тут все просто, это значит что функция\процедура имеет 4 параметра длиной по 4 байта. А вот какие именно тут тебе только дока поможет.
     
  3. Rihter

    Rihter New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2006
    Сообщения:
    76
    Все разобрался :)



    DWORD = 4; (DWORD * 4) = Четыре параметра типа DWORD

    Так
     
  4. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    кстати, как при компиляции ДЛЛ в масме указать линкеру, чтобы генеритл в таблице экспорта не SomeFunc, a SomeFunc@16 к примеру, т.е. с кол-вом парам-ов, т.к. вызывать будет C программа. как это сделать в С - вопросов нет, а вот как в масме - вопрос.

    если в def файле указывать @ - это будет ординал
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Jupiter

    По умолчанию (если указать ".model flat,stdcall"), PROC манглит символы согласно стандарту stdcall, т.е. SomeFunc превращает в _SomeFunc@16 Ничего дополнительно указывать не надо. Расширенная версия символов попадает в *.lib, который потом можно использовать в сишном проекте для статической линковки с DLL. Фактически, имена в таблице экспорта DLL имеют значение только для динамической линковки.



    LuckyDevil



    Это значит, что параметры занимают 16 байт на стеке. Чаще всего их действительно оказывается 4 по 4 байта, но не всегда. Их может быть 2 по 8 байт. Совсем недавно попался пример с одним параметром размером 12 байт.