模块的宏定义

MODULE_NAME_API

UE 中的模块,如果定义的符号允许被外部模块访问,则需要在 class 前加 MODULE_NAME_API,这个宏是什么意思呢?
打开 Definitions.MODULE_NAME.h 这个文件可以知道,MODULE_NAME_API这个宏的定义是 DLLEXPORT,看名字就知道是导出符号的,但是针对不同的平台是不一样的,DLLEXPORTDLLIMPORT的宏是定义在 Runtime\Core\Public\${PLATFROM}\${PLATFROM}Platfrom.h 下的(Android 与 Linux 的相同):

1
2
3
4
5
6
// Runtime\Core\Public\Android\AndroidPlatform.h
// Runtime\Core\Public\Linux\LinuxPlatform.h

// DLL export and import definitions
#define DLLEXPORT __attribute__((visibility("default")))
#define DLLIMPORT __attribute__((visibility("default")))

MacOS 则是一个空的宏定义:

1
2
3
4
5
// Runtime\Core\Public\Mac\MacPlatform.h

// DLL export and import definitions
#define DLLEXPORT
#define DLLIMPORT

Windows 的为__declspec

1
2
3
4
5
// Runtime\Core\Public\Windows\WIndowsPlatform.h

// DLL export and import definitions
#define DLLEXPORT __declspec(dllexport)
#define DLLIMPORT __declspec(dllimport)

模块的宏定义

UE 中模块的宏定义会汇总在这个文件下:

1
Intermediate\Build\Win64\UE4Editor\Development\NetExampleDemo\Definitions.MODULE_NAME.h

其中定义了 MODULE_NAME_APIDLLEXPORT,导出自己模块内的符号,还有引用的其他模块的 MODULE_NAME_APIDLLIMPORT,导入引用模块内的符号,在编译时链接可用,还有一些宏开关。
类似于这样:Definations.WebBrowserEx.h