虚幻5 UE5 UNREALED_API d虚幻的

news/2024/12/25 2:32:36/

在虚幻引擎的模块化系统中,UNREALED_API 用于声明那些需要被其他模块访问的类和函数。当你在一个模块中标记一个类或函数为 UNREALED_API 时,如果该模块被编译为DLL,那么这个宏会使得该类或函数在DLL边界上被正确地导出。如果其他模块依赖于这个DLL,UNREALED_API 会使得这些类和函数在DLL被加载时被导入

是的,这个解释是正确的,以下是更详细的说明和补充:


1. 模块化系统中的 UNREALED_API

虚幻引擎(Unreal Engine)的模块化系统允许引擎功能和开发者自定义内容被分离到不同的模块中。这种模块化架构使得项目的扩展性更强,同时也提升了运行效率和代码的组织性。

当一个模块(比如 UnrealEd 模块)需要将某些类或函数暴露给其他模块时,就需要使用类似 UNREALED_API 的宏进行标记。

  • 模块作为 DLL(动态链接库)编译时
    • UNREALED_API 会告诉编译器,这些被标记的类或函数需要在 DLL 边界上被导出(export)。
  • 模块被其他模块依赖时
    • 当另一个模块加载依赖的 DLL 时,UNREALED_API 会确保这些类或函数可以被正确导入(import)。

2. 如何工作

UNREALED_API 的具体行为依赖于预定义的编译器宏。它根据当前模块的使用场景,动态切换为导出或导入模式:

  • 当模块被编译为 DLL 时UNREALED_API 会被定义为 __declspec(dllexport)(在 Windows 平台上)。
    • 这会告诉编译器,标记的类和函数需要从这个模块中导出。
  • 当其他模块依赖于这个 DLL 时UNREALED_API 会被定义为 __declspec(dllimport)
    • 这会告诉编译器,从依赖的 DLL 中导入这些类和函数。

例如:

// 定义在 UnrealEd 模块中的一个类
class UNREALED_API MyEditorClass
{
public:void DoSomething();
};
  • UnrealEd 模块被编译为 DLL 时,UNREALED_API 确保 MyEditorClass 被正确导出。
  • 当其他模块依赖 UnrealEd 模块时,UNREALED_API 确保 MyEditorClass 被正确导入。

3. 为什么需要 UNREALED_API

这是由于在模块化系统中,跨 DLL 的函数调用需要遵循动态链接的规则。没有 UNREALED_API 的情况下:

  • 编译器无法正确识别哪些符号需要导出或导入,从而导致链接错误(Linker Error)。
  • 在某些情况下,即使能编译通过,运行时也可能出现未定义行为(Undefined Behavior)。

UNREALED_API 简化了开发者处理跨模块依赖的复杂性,确保模块间的符号正确暴露和加载。


4. 适用场景

你需要使用 UNREALED_API 的典型场景包括:

  • 开发插件:插件通常作为独立的模块运行,必须暴露特定的功能供主引擎模块调用。
  • 扩展引擎功能:当自定义模块依赖于引擎核心模块(如 UnrealEdCore 模块)时。
  • 共享模块内容:在模块间共享类或函数时,需要确保它们可以跨模块访问。

http://www.ppmy.cn/news/1557885.html

相关文章

C语言学习-数组练习

1. 键盘录入一组数列&#xff0c;利用冒泡排序将数据由大到小排序 #include <stdio.h> #include <string.h> #define A_NUM 10int t1 0; int t2 0;/** *键盘录入一组数列&#xff0c;利用冒泡排序将数据由大到小排序 */ //使用常规冒泡完成 void t_1_1() {int i…

前端框架Vue的路由机制

大家好&#xff0c;我是G探险者。 最近在调试前端代码的时候&#xff0c;遇到一个问题。首先我们有一个门户页面&#xff0c;该页面里面有很多的豆腐块&#xff0c;每个豆腐块会配置一个系统的跳转连接。 我的系统就是其中一个豆腐块&#xff0c;我第一次登录进来之后&#xf…

低代码可视化-uniapp进销存销售表单-代码生成器

将低代码理念与Uni-App框架结合&#xff0c;应用到进销存销售表单的开发中&#xff0c;可以显著提升开发效率和代码质量。以下是对低代码可视化-UniApp进销存销售表单-代码生成器的详细分析&#xff1a; 客户信息 选择客户信息&#xff0c;选择客户信息后显示在表单开头信息。…

ubuntu--截图软件

截图软件 flameshot 安装 sudo apt install flameshot flameshot打开方式 /usr/bin/flameshot gui 这种方式打开不方便。 alias添加shell指令打开flameshot vi ~/.bashrc alias flameshot"/usr/bin/flameshot gui"

34.正则表达式

python正则表达式&#xff0c;使用re模块&#xff0c;模块中三个基础方法来做正则匹配。 match re.match(匹配规则&#xff0c; 被匹配的字符串) 从字符串开头进行匹配&#xff0c;匹配成功返回匹配对象&#xff08;包含匹配的信息&#xff09;&#xff0c;匹配不成功返回空。…

以太网 Ethernet 报文解析

以太网 Ethernet 报文解析 使用canoe 发送报文。解析这个报文 参考资料 IPv4报文协议 链接: https://blog.csdn.net/m0_61643743/article/details/128509490 UDP 报文协议 链接: https://blog.csdn.net/weixin_43142797/article/details/105648071 https://fasionchan.com/ne…

ffmpeg之显示一个yuv照片

显示YUV图片的步骤 1.初始化SDL库 目的&#xff1a;确保SDL库正确初始化&#xff0c;以便可以使用其窗口、渲染和事件处理功能。操作&#xff1a;调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 2.创建窗口用于显示YUV图像&#xff1a; 目的&#xff1a;创建一个…

【蓝桥杯每日一题】求和——前缀和

求和 蓝桥杯每日一题 2024-12-17 求和 前缀和 题目大意 给定 n n n 个整数 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​&#xff0c;求它们两两相乘再相加的和&#xff0c;即&#xff1a; S a 1 ⋅ a 2 a 1 ⋅ a 3 … a 1 ⋅ a n a 2 ⋅ a 3 … a …