Что такое VX_API_ENTRY и VX_API_CALL в стандарте Khronos openvx?

Я изучаю расширение экспорта-импорта Khronos openvx. во время чтения vx_import.h файл, который я видел

VX_API_ENTRY vx_status VX_API_CALL vxReleaseImport(vx_import *import);

функция.

Я хочу понять, почему они написали VX_API_ENTRY а также VX_API_CALL в функции.

Я новичок в openvx. Если кто-нибудь знает это, пожалуйста, ответьте.

0

Решение

в 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).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]