有时候需要包含一些平台相关的代码,如 windows.h 里面包含了很多头文件,其中一些定义了很多宏,如:
1 |
如果我们同时在代码中包含了 windows.h 和使用了 IPlatformFile 的接口来调用它的 DeleteFile 函数,因为 DeleteFile 被定义成了宏,所以在预处理阶段就会被替换,导致编译时访问 IPlatformFile 的DeleteFileW成员,但实际上它是不存在的,就产生了以下编译错误:
1 | error C2039: 'DeleteFileW': is not a member of 'IPlatformFile' |
解决办法就是不直接包含 windows.h 而是使用以下封装:
1 |
这样可以避免污染 UE 的符号名字。
UE 的文档中也有介绍:第三方库 #故障排除