В заголовке 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).