Может ли кто-нибудь указать мне полный смысл следующих двух строк кода?
typedef void DLLEXPORT __stdcall (* DLL_Inquiry) (char * cDriverName, int * iDriverType, int * iDriverBUS, int * iNumberOfChannel);
DLL_Inquiry DRV_PH_Индикция;
Я знаю, что DLLEXPORT
должен экспортировать функцию из DLL, __stdcall
- это соглашение об __stdcall
аргумента x86.
Но все же я не могу получить весь смысл этих двух строк. Может быть, меня путают с использованием указателя функции или функции в typedef
.
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
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
.
_STDCALL
"_STDCALL
- это соглашение о передаче аргумента x86." Есть много соглашений о вызовах для x86.stdcall
- это тот, который используется Win32 API.