SOMTEMPLATE_VR_API 是什么?

问题描述 投票:0回答:1

我在虚幻引擎C++ VR实现中找到了这个宏。 有人可以解释一下这个宏的目标是什么吗? 我什么时候应该使用这个宏? 为什么我在虚幻引擎源码中找不到这个宏?

UCLASS()
class SOMTEMPLATE_VR_API className :
c++ macros unreal-engine4
1个回答
3
投票

_API 宏用于向其他模块公开类和函数。

来自文档

考虑这些说明符的最简单方法是它们用于将函数、类或数据标记为模块的 DLL 文件的公共函数、类或数据。如果您将 Engine 模块中的函数标记为 ENGINE_API,则任何导入 Engine 的模块都可以直接访问该函数。

这些仅在以模块化模式(桌面平台上的 DLL 文件)编译引擎时使用。相反的是我们所说的整体模式,它将所有代码放在一个可执行文件中。构建类型由 UnrealBuildTool 设置和/或平台以及构建配置控制。

实际的 API 宏相当于以下其中一项,具体取决于 UBT 编译代码的方式:

  • __declspec( dllexport )
    ,以模块化模式编译模块代码时。

  • __declspec( dllimport )
    ,当包含您要导入的模块的公共模块头时。

  • 空,以整体模式编译时

API 宏仅对从另一个模块静态导入的模块有意义。 Core 模块就是一个很好的例子——UE4 中的几乎所有其他模块都在其 *.Build.cs 文件中将 Core 指定为导入依赖项。

许多模块不需要静态导入(例如 SceneOutliner 模块)。我们将这些模块称为动态加载模块。动态加载的模块非常棒,因为它们可以在启动时被发现(有点像插件),并且通常可以动态重新加载。

API 宏主要用于较旧的代码,以允许较新的模块从其 DLL 访问它。在较新的代码中,API 宏的使用要少得多,而是设置良好的接口层来跨 DLL 边界公开功能。

© www.soinside.com 2019 - 2024. All rights reserved.