一文整理UE4代码中支持反射的说明符关键字——UCLASS篇

虚幻引擎代码纷繁复杂,一定程度上就是因为从UObject开始架构的这套反射系统,它在带给我们优秀的反射机制的同时,也让代码的阅读及编写有了一定的门槛。而我今天,就是想通过这篇文章的整理,试着踏过这道坎。

说明符关键字是虚幻C++实现反射机制的重要一环,反射系统(或者说虚幻编译系统)通过识别这些说明符来将变量、函数、类等添加到反射系统里,进而可以进一步支持GC、序列化等。本文是系列文章中针对UCLASS、UFUNCTION以及UPROPERTY中的UCLASS中可能会出现的关键字进行整理,主要参考虚幻官方文档中的Gameplay Architecture一章以及源码中ObjectMacros.h。本文的本质也是整理和汉化(可理解化)。

总览表

关键字解释
ClassGroup用于分类,特别是component的分类
Within

拆解

ClassGroup

添加新类 UTestSceneComponent继承自USceneComponent,将ClassGroup设定为“Test”(另一种写法ClassGroup = Test或ClassGroup = (Test))。
此外 meta=(BlueprintSpawnableComponent) 的写法是从元数据的角度表明该类是可以有蓝图进行生成的。

UCLASS( ClassGroup="Test", meta=(BlueprintSpawnableComponent) )
class TESTPRJ_API UTestSceneComponent : public USceneComponent
{
	GENERATED_BODY()
	// other code		
};

编译之后,在蓝图内部的即可在对应分类Test下找到该组件。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UE4使用ActiveX需要进行一些额外的设置和步骤。下面是一个简单的示例,演示了如何在UE4使用ActiveX。 1. 首先,确保你的项目是基于C++的项目。在UE4编辑器创建一个新的C++项目或将现有项目转换为C++项目。 2. 打开你的项目,然后在源件目录创建一个新的C++类,用于处理ActiveX控件的操作。例如,创建一个名为"ActiveXHandler"的类。 3. 在"ActiveXHandler"类的头件(.h),添加必要的包含件和声明。例如,你可能需要包含"Windows.h"和"atlbase.h"等件。 ```cpp #pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "ActiveXHandler.generated.h" UCLASS() class YOURPROJECT_API UActiveXHandler : public UObject { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category = "ActiveX") bool InitializeActiveX(); // 添加其他需要的函数和成员变量 }; ``` 4. 在"ActiveXHandler"类的源件(.cpp)实现相应的函数。在"InitializeActiveX"函数,你可以使用ActiveX控件的CLSID来创建和初始化控件实例,并进行其他必要的设置和操作。 ```cpp #include "ActiveXHandler.h" #include "Windows.h" #include "atlbase.h" bool UActiveXHandler::InitializeActiveX() { // 创建并初始化ActiveX控件实例 CLSID clsid; HRESULT hr = CLSIDFromProgID(L"ProgID_of_ActiveX_Control", &clsid); if (SUCCEEDED(hr)) { CComPtr<IUnknown> pUnknown; hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (LPVOID*)&pUnknown); if (SUCCEEDED(hr)) { // 进行其他必要的设置和操作 // 例如,获取控件接口并使用它执行操作 // 你可以使用QueryInterface函数来获取其他接口 return true; } } return false; } ``` 5. 在UE4的蓝图或其他C++类,创建或获取"ActiveXHandler"的实例,并调用其函数来使用ActiveX控件。 ```cpp UActiveXHandler* ActiveXHandler = NewObject<UActiveXHandler>(); if (ActiveXHandler->InitializeActiveX()) { // ActiveX控件已成功初始化,可以进行进一步的操作 } else { // 初始化失败,处理错误情况 } ``` 请注意,这只是一个简单的示例,实际上使用ActiveX可能涉及更复杂的操作和步骤。具体实现方式可能因所使用的ActiveX控件和需求而有所不同。在使用ActiveX时,请确保了解相关档和安全注意事项,并按照最佳实践进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Claude的羽毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值