0

我正在研究 Khronos openvx 的导入导出扩展。在阅读vx_import.h我看到的文件时

VX_API_ENTRY vx_status VX_API_CALL vxReleaseImport(vx_import *import);  

功能。

我想了解他们为什么在函数中编写VX_API_ENTRY和编写。VX_API_CALL

我是openvx的新手。如果有人知道这个请回复。

4

1 回答 1

1

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定义为空并在 WindowsVX_API_CALL上定义__stdcall,否则为空。

它们是干什么用的?好吧,那些是指定 API 的调用约定,同时,正如评论所说,记录哪些函数实际上是公共的。

例如,在 Windows 中,来自 DLL 的公共函数有时带有declspec(__dllimport)前缀以指示编译器使用导入函数表,您的构建系统可以VX_API_ENTRY为此定义。

__stdcall问题是这个库使用的调用约定通常你不指定它,让编译器选择默认值。但在公共 DLL 中,最好不要过多依赖默认值,因为 DLL 编译器和 EXE 编译器可能使用不同的值,这会破坏链接。

但大多数情况下,作为 API 的最终用户,您可以忽略它们,它们只是工作。

除了VX_CALLBACK!您必须将回调声明为,VX_CALLBACK否则您的代码可能会在某些架构(主要是 Windows)上失败。

于 2018-09-07T08:27:21.943 回答