我在虚幻引擎C++ VR实现中找到了这个宏。 有人可以解释一下这个宏的目标是什么吗? 我什么时候应该使用这个宏? 为什么我在虚幻引擎源码中找不到这个宏?
UCLASS()
class SOMTEMPLATE_VR_API className :
_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 边界公开功能。