gpt4 book ai didi

c++ - Khronos openvx 标准中的 VX_API_ENTRY 和 VX_API_CALL 是什么?

转载 作者:行者123 更新时间:2023-11-28 04:33:27 25 4
gpt4 key购买 nike

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

VX_API_ENTRY vx_status VX_API_CALL vxReleaseImport(vx_import *import);  

函数。

我想明白为什么他们在函数中写了VX_API_ENTRYVX_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 的调用约定,同时,正如评论所说,记录哪些函数实际上是公开的。

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

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

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

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

关于c++ - Khronos openvx 标准中的 VX_API_ENTRY 和 VX_API_CALL 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com