Я изучаю расширение экспорта-импорта Khronos openvx. во время чтения vx_import.h
файл, который я видел
VX_API_ENTRY vx_status VX_API_CALL vxReleaseImport(vx_import *import);
функция.
Я хочу понять, почему они написали VX_API_ENTRY
а также VX_API_CALL
в функции.
Я новичок в openvx. Если кто-нибудь знает это, пожалуйста, ответьте.
в vx_types.h
Заголовок вы можете прочитать:
/*!
* \internal
* \def VX_API_ENTRY
* \brief This is a tag used to identify exported, public API functions as
* distinct from internal functions, helpers, and other non-public interfaces.
* It can optionally be defined in the make system according the the compiler and intent.
* \ingroup group_basic_features
*/
/*!
* \def VX_API_CALL
* \brief Defines calling convention for OpenVX API.
* \ingroup group_basic_features
*/
/*!
* \def VX_CALLBACK
* \brief Defines calling convention for user callbacks.
* \ingroup group_basic_features
*/
Затем, VX_API_ENTRY
определяется как пустой и VX_API_CALL
определено __stdcall
на Windows, и пусто в противном случае.
Для чего они? Ну, они определяют соглашение о вызовах API, и в то же время, как говорится в комментарии, документируют, какие функции на самом деле являются общедоступными.
Например, в Windows публичные функции из DLL иногда имеют declspec(__dllimport)
с префиксом для указания компилятору использовать таблицу функций импорта, ваша система сборки может определить VX_API_ENTRY
для этого.
__stdcall
дело в том соглашение о вызовах используется этой библиотекой. Обычно вы не указываете это и позволяете компилятору выбирать значение по умолчанию. Но в общедоступной DLL хорошей идеей является не полагаться на значения по умолчанию, поскольку компилятор DLL и компилятор EXE могут использовать разные значения, и это может нарушить связывание.
Но в основном, как конечный пользователь API, вы можете просто игнорировать их, они просто работают.
За исключением VX_CALLBACK
! Вы должен объявить ваши обратные вызовы как VX_CALLBACK
или вы рискуете сбоем своего кода на некоторых архитектурах (в основном Windows).
Других решений пока нет …