Объявление WINAPI функции в своём заголовочном файле

Тема в разделе "LANGS.C", создана пользователем lotos_od, 14 июл 2007.

  1. lotos_od

    lotos_od New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    29
    Адрес:
    Ukraine
    Возникла необходимость вызова ZwOpenEvent в юзермоде. Что бы не включать wdm.h (изза множества редефенишен конфликтов) взял оттуда описание:

    NTSYSCALLAPI
    NTSTATUS
    NTAPI
    ZwOpenEvent (
    __out PHANDLE EventHandle,
    __in ACCESS_MASK DesiredAccess,
    __in POBJECT_ATTRIBUTES ObjectAttributes
    );

    и подключил ntdll.lib. Линкер ругается :

    CpfAlert.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) long __stdcall ZwOpenEvent(void * *,unsigned long,struct _OBJECT_ATTRIBUTES *)" (__imp_?ZwOpenEvent@@YGJPAPAXKPAU_OBJECT_ATTRIBUTES@@@Z) referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)

    В общемто его можно понять поскольку видимо ищется не __imp_ZwOpenEvent@12, а некая (__imp_?ZwOpenEvent@@YGJPAPAXKPAU_OBJECT_ATTRIBUTES@@@Z). Собственно как сделать правильный declaration в этом случае?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    extern "C" не пробовал ?
    это замангленое по правилам С++ имя. Юзай extern "C" чтобы убрать это
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    extern "C" добавь перед определением прототипа функции.
     
  4. lotos_od

    lotos_od New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    29
    Адрес:
    Ukraine
    Great
    n0name
    Огромное спасибо, ребята. Так и есть. :cool: