Khronos openvx 标准中的 VX_API_ENTRY 和 VX_API_CALL 是什么?
What is VX_API_ENTRY and VX_API_CALL in Khronos openvx standard?
我正在研究 Khronos openvx 的 Import Export Extension。在阅读 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
header中您可以阅读:
/*!
* \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
在Windows上定义__stdcall
,否则为空。
它们有什么用?好吧,那些指定了 API 的调用约定,同时,正如评论所说,记录了哪些函数实际上是 public.
例如,在 Windows 中,来自 DLL 的 public 函数有时具有 declspec(__dllimport)
前缀以指示编译器使用导入函数 table,您的构建系统可以为此定义 VX_API_ENTRY
。
__stdcall
是这个库使用的调用约定。通常您不指定它并让编译器选择默认值。但在 public DLL 中,最好不要过分依赖默认值,因为 DLL 编译器和 EXE 编译器可能使用不同的值,这会破坏链接。
但大多数情况下,作为 API 的 end-user,您可以忽略它们,它们只是有效。
VX_CALLBACK
除外!您必须将您的回调声明为VX_CALLBACK
,否则您的代码可能会在某些架构(主要是Windows)上失败。
我正在研究 Khronos openvx 的 Import Export Extension。在阅读 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
header中您可以阅读:
/*!
* \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
在Windows上定义__stdcall
,否则为空。
它们有什么用?好吧,那些指定了 API 的调用约定,同时,正如评论所说,记录了哪些函数实际上是 public.
例如,在 Windows 中,来自 DLL 的 public 函数有时具有 declspec(__dllimport)
前缀以指示编译器使用导入函数 table,您的构建系统可以为此定义 VX_API_ENTRY
。
__stdcall
是这个库使用的调用约定。通常您不指定它并让编译器选择默认值。但在 public DLL 中,最好不要过分依赖默认值,因为 DLL 编译器和 EXE 编译器可能使用不同的值,这会破坏链接。
但大多数情况下,作为 API 的 end-user,您可以忽略它们,它们只是有效。
VX_CALLBACK
除外!您必须将您的回调声明为VX_CALLBACK
,否则您的代码可能会在某些架构(主要是Windows)上失败。