typedef, DLLEXPORT, __stdcall справка в C

0

Может ли кто-нибудь указать мне полный смысл следующих двух строк кода?

typedef void DLLEXPORT __stdcall (* DLL_Inquiry) (char * cDriverName, int * iDriverType, int * iDriverBUS, int * iNumberOfChannel);

DLL_Inquiry DRV_PH_Индикция;

Я знаю, что DLLEXPORT должен экспортировать функцию из DLL, __stdcall - это соглашение об __stdcall аргумента x86.

Но все же я не могу получить весь смысл этих двух строк. Может быть, меня путают с использованием указателя функции или функции в typedef.

  • 3
    _STDCALL " _STDCALL - это соглашение о передаче аргумента x86." Есть много соглашений о вызовах для x86. stdcall - это тот, который используется Win32 API.
Теги:

2 ответа

1
Лучший ответ

DLL_Incuiry - это typedef для указателя на функцию, которая принимает аргументы (char*, int*, int*, int*) и не возвращает значения (return type void). Функция также использует соглашение о вызове, определенное DLLEXPORT и __stdcall.

DRV_PH_Inquiry - это переменная этого типа, поэтому, если у вас есть функция foo:

void DLLEXPORT __stdcall foo (char *cDriverName, int *iDriverType, int *iDriverBUS, int *iNumberOfChannel);

вы можете выполнить задание:

DRV_PH_Inquiry = foo;   // DRV_PH_Inquiry now points to the function foo
  • 0
    _STDCALL - соглашение о вызовах, но я думаю, DLLEXPORT - не соглашение о вызовах?
  • 0
    Я думаю, что DLLEXPORT расширяется до чего-то, что заставляет компилятор / компоновщик экспортировать функцию / объект при построении DLL, и ни к чему, когда не строит DLL.
1
typedef void DLLEXPORT __stdcall (*DLL_Inquiry) (
    char *cDriverName, int *iDriverType, int *iDriverBUS, int *iNumberOfChannel);

Это определяет typedef для DLL_Inquiry как указатель на функцию.

  • Функция получает перечисленные параметры, не нужно объяснять их дальше.
  • Функция имеет тип возврата void.
  • Вызывающим соглашением является __stdcall.
  • Определение DLLEXPORT не является стандартным. Это будет найдено в вашем коде. Скорее всего, будет файл заголовка, который определяет DLLEXPORT как макрос. Например, при компиляции DLL на платформе Windows он может оценивать значение __declspec(dllexport). В любом случае, вы можете точно знать, что такое определение DLLEXPORT.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню