5#include "Containers/Array.h"
7#include "Containers/Map.h"
18#include "Misc/Optional.h"
36 UE_DEPRECATED(5.0,
"GIsHotReload has been deprecated, use IsReloadActive to test to see if a reload is in progress.")
131 , bIsGameModule(
false)
341 template<
typename TModuleInterface>
364 template<
typename TModuleInterface>
380 template<
typename TModuleInterface>
394 template<
typename TModuleInterface>
531 return ModulesChangedEvent;
545 return ProcessLoadedObjectsCallback;
555 return OnModulesUnloadCallback;
565 return CheckLiveObjectsInModulesCallback;
578 return IsPackageLoaded;
587 struct FPrivateToken {
explicit FPrivateToken() =
default; };
608 FString OriginalFilename;
620 bool bWasUnloadedAtShutdown;
629 static int32 CurrentLoadOrder;
636 , bWasUnloadedAtShutdown(
false)
638 , LoadOrder(CurrentLoadOrder++)
663#if UE_MERGED_MODULES && !UE_BUILD_SHIPPING
714 void InternalFreeLibrary(
FName ModuleName,
void*
Handle);
733 CORE_API void ProcessPendingStaticallyLinkedModuleInitializers()
const;
748 bool bCanProcessNewlyLoadedObjects;
751 bool bExtraBinarySearchPathsAdded;
754 bool bIsLoadingDynamicLibrary;
807template<
class ModuleClass >
832 return new ModuleClass();
887 virtual bool IsGameModule()
const override
911 constexpr bool ModuleNameEquals(
const char* Lhs,
const char* Rhs)
930#if IS_MONOLITHIC || UE_MERGED_MODULES
933 #define IMPLEMENT_MODULE( ModuleImplClass, ModuleName ) \
935 static FStaticallyLinkedModuleRegistrant< ModuleImplClass > ModuleRegistrant##ModuleName( TEXT(#ModuleName) ); \
937 extern "C" void IMPLEMENT_MODULE_##ModuleName() { UE_STATIC_ASSERT_WARN(UE::Core::Private::ModuleNameEquals(#ModuleName, UE_MODULE_NAME ), "Module name mismatch (" #ModuleName " != " UE_MODULE_NAME "). Please ensure module name passed to IMPLEMENT_MODULE is " UE_MODULE_NAME " to avoid runtime errors in monolithic builds."); } \
938 PER_MODULE_BOILERPLATE_ANYLINK(ModuleImplClass, ModuleName)
942 #define IMPLEMENT_MODULE( ModuleImplClass, ModuleName ) \
949 static IModuleInterface* Initialize##ModuleName##Module() \
951 return new ModuleImplClass(); \
953 static FModuleInitializerEntry ModuleName##InitializerEntry(TEXT(#ModuleName), Initialize##ModuleName##Module, TEXT(UE_MODULE_NAME)); \
955 extern "C" void IMPLEMENT_MODULE_##ModuleName() { UE_STATIC_ASSERT_WARN(UE::Core::Private::ModuleNameEquals(#ModuleName, UE_MODULE_NAME ), "Module name mismatch (" #ModuleName " != " UE_MODULE_NAME "). Please ensure module name passed to IMPLEMENT_MODULE is " UE_MODULE_NAME " to avoid runtime errors in monolithic builds."); } \
956 PER_MODULE_BOILERPLATE_ANYLINK(ModuleImplClass, ModuleName)
971#define IMPLEMENT_GAME_MODULE( ModuleImplClass, ModuleName ) \
972 IMPLEMENT_MODULE( ModuleImplClass, ModuleName )
979 #ifdef UE_ENGINE_DIRECTORY
980 #define IMPLEMENT_FOREIGN_ENGINE_DIR() const TCHAR *GForeignEngineDir = TEXT( UE_ENGINE_DIRECTORY );
982 #define IMPLEMENT_FOREIGN_ENGINE_DIR() const TCHAR *GForeignEngineDir = nullptr;
985 #define IMPLEMENT_FOREIGN_ENGINE_DIR()
991#define UE_LIST_ARGUMENT(...) __VA_ARGS__
996#define UE_REGISTER_SIGNING_KEY(ExponentValue, ModulusValue) \
997 struct FSigningKeyRegistration \
999 FSigningKeyRegistration() \
1001 extern CORE_API void RegisterSigningKeyCallback(void (*)(TArray<uint8>&, TArray<uint8>&)); \
1002 RegisterSigningKeyCallback(&Callback); \
1004 static void Callback(TArray<uint8>& OutExponent, TArray<uint8>& OutModulus) \
1006 const uint8 Exponent[] = { ExponentValue }; \
1007 const uint8 Modulus[] = { ModulusValue }; \
1008 OutExponent.SetNum(UE_ARRAY_COUNT(Exponent)); \
1009 OutModulus.SetNum(UE_ARRAY_COUNT(Modulus)); \
1010 for(int ByteIdx = 0; ByteIdx < UE_ARRAY_COUNT(Exponent); ByteIdx++) \
1012 OutExponent[ByteIdx] = Exponent[ByteIdx]; \
1014 for(int ByteIdx = 0; ByteIdx < UE_ARRAY_COUNT(Modulus); ByteIdx++) \
1016 OutModulus[ByteIdx] = Modulus[ByteIdx]; \
1019 } GSigningKeyRegistration;
1024#define UE_REGISTER_ENCRYPTION_KEY(...) \
1025 struct FEncryptionKeyRegistration \
1027 FEncryptionKeyRegistration() \
1029 extern CORE_API void RegisterEncryptionKeyCallback(void (*)(unsigned char OutKey[32])); \
1030 RegisterEncryptionKeyCallback(&Callback); \
1032 static void Callback(unsigned char OutKey[32]) \
1034 const unsigned char Key[32] = { __VA_ARGS__ }; \
1035 for(int ByteIdx = 0; ByteIdx < 32; ByteIdx++) \
1037 OutKey[ByteIdx] = Key[ByteIdx]; \
1040 } GEncryptionKeyRegistration;
1042#define IMPLEMENT_TARGET_NAME_REGISTRATION() \
1043 struct FTargetNameRegistration \
1045 FTargetNameRegistration() \
1047 FPlatformMisc::SetUBTTargetName(TEXT(PREPROCESSOR_TO_STRING(UE_TARGET_NAME))); \
1049 } GTargetNameRegistration;
1054 #define IMPLEMENT_APPLICATION( ModuleName, GameName ) \
1056 TCHAR GInternalProjectName[64] = TEXT( GameName ); \
1057 IMPLEMENT_FOREIGN_ENGINE_DIR() \
1058 IMPLEMENT_SIGNING_KEY_REGISTRATION() \
1059 IMPLEMENT_ENCRYPTION_KEY_REGISTRATION() \
1060 IMPLEMENT_GAME_MODULE(FDefaultGameModuleImpl, ModuleName) \
1061 PER_MODULE_BOILERPLATE \
1062 FEngineLoop GEngineLoop;
1066 #define IMPLEMENT_APPLICATION( ModuleName, GameName ) \
1068 struct FAutoSet##ModuleName \
1070 FAutoSet##ModuleName() \
1072 FCString::Strncpy(GInternalProjectName, TEXT( GameName ), UE_ARRAY_COUNT(GInternalProjectName)); \
1074 } AutoSet##ModuleName; \
1075 PER_MODULE_BOILERPLATE_ANYLINK(FDefaultGameModuleImpl, ModuleName) \
1076 FEngineLoop GEngineLoop;
1085 #if PLATFORM_DESKTOP
1087 #define IMPLEMENT_PRIMARY_GAME_MODULE( ModuleImplClass, ModuleName, DEPRECATED_GameName ) \
1089 TCHAR GInternalProjectName[64] = TEXT( PREPROCESSOR_TO_STRING(UE_PROJECT_NAME) ); \
1091 bool GIsGameAgnosticExe = false; \
1092 IMPLEMENT_FOREIGN_ENGINE_DIR() \
1093 IMPLEMENT_SIGNING_KEY_REGISTRATION() \
1094 IMPLEMENT_ENCRYPTION_KEY_REGISTRATION() \
1095 IMPLEMENT_TARGET_NAME_REGISTRATION() \
1096 IMPLEMENT_GAME_MODULE( ModuleImplClass, ModuleName ) \
1097 PER_MODULE_BOILERPLATE
1101 #define IMPLEMENT_PRIMARY_GAME_MODULE( ModuleImplClass, ModuleName, DEPRECATED_GameName ) \
1103 TCHAR GInternalProjectName[64] = TEXT( PREPROCESSOR_TO_STRING(UE_PROJECT_NAME) ); \
1104 PER_MODULE_BOILERPLATE \
1105 IMPLEMENT_FOREIGN_ENGINE_DIR() \
1106 IMPLEMENT_SIGNING_KEY_REGISTRATION() \
1107 IMPLEMENT_ENCRYPTION_KEY_REGISTRATION() \
1108 IMPLEMENT_TARGET_NAME_REGISTRATION() \
1109 IMPLEMENT_GAME_MODULE( ModuleImplClass, ModuleName ) \
1111 bool GIsGameAgnosticExe = false;
1117 #define IMPLEMENT_PRIMARY_GAME_MODULE( ModuleImplClass, ModuleName, GameName ) \
1119 IMPLEMENT_SIGNING_KEY_REGISTRATION() \
1120 IMPLEMENT_ENCRYPTION_KEY_REGISTRATION() \
1121 IMPLEMENT_TARGET_NAME_REGISTRATION() \
1122 IMPLEMENT_GAME_MODULE( ModuleImplClass, ModuleName )
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
IReload * GetActiveReloadInterface()
Definition ModuleManager.h:1175
EActiveReloadType
Definition ModuleManager.h:1131
ECheckModuleCompatibilityFlags
Definition ModuleManager.h:102
EActiveReloadType GetActiveReloadType()
Definition ModuleManager.h:1171
bool IsReloadActive()
Definition ModuleManager.h:1173
EModuleLoadResult
Definition ModuleManager.h:49
ELoadModuleFlags
Definition ModuleManager.h:113
IModuleInterface *(* FInitializeModuleFunctionPtr)(void)
Definition ModuleManager.h:844
CORE_API const TCHAR * LexToString(EModuleLoadResult LoadResult)
Definition ModuleManager.cpp:938
EModuleChangeReason
Definition ModuleManager.h:89
EModuleUnloadResult
Definition ModuleManager.h:75
const bool
Definition NetworkReplayStreaming.h:178
Definition Archive.h:1208
Definition ModuleManager.h:881
Definition ModuleManager.h:873
Definition NameTypes.h:1680
Definition ModuleManager.h:852
static FInitializeModuleFunctionPtr FindModule(const TCHAR *Name)
Definition ModuleManager.cpp:138
CORE_API ~FModuleInitializerEntry()
Definition ModuleManager.cpp:121
Definition ModuleManager.h:172
static CORE_API void RegisterStaticallyLinkedModule(const FLazyName InModuleName, FInitializeStaticallyLinkedModuleRaw *InInitializer)
Definition ModuleManager.cpp:2084
CORE_API bool QueryModule(const FName InModuleName, FModuleStatus &OutModuleStatus) const
Definition ModuleManager.cpp:1672
DECLARE_DELEGATE_RetVal(IModuleInterface *, FInitializeStaticallyLinkedModule) typedef IModuleInterface *FInitializeStaticallyLinkedModuleRaw()
TDelegateRegistration< bool(TConstArrayView< FName >)> & OnCheckLiveObjectsInModulesCallback()
Definition ModuleManager.h:563
virtual CORE_API bool Exec_Dev(UWorld *Inworld, const TCHAR *Cmd, FOutputDevice &Ar) override
Definition ModuleManager.cpp:1544
CORE_API bool HasAnyOverridenModuleFilename() const
Definition ModuleManager.cpp:1736
CORE_API void LoadModuleBinaryOnly(FName ModuleName)
Definition ModuleManager.cpp:2122
CORE_API void RefreshModuleFilenameFromManifest(const FName InModuleName)
Definition ModuleManager.cpp:536
CORE_API void QueryModules(TArray< FModuleStatus > &OutModuleStatuses) const
Definition ModuleManager.cpp:1696
CORE_API IModuleInterface * LoadModule(const FName InModuleName, ELoadModuleFlags InLoadModuleFlags=ELoadModuleFlags::None)
Definition ModuleManager.cpp:908
CORE_API bool IsModuleLoaded(const FName InModuleName) const
Definition ModuleManager.cpp:347
CORE_API void FindModules(const TCHAR *WildcardWithoutExtension, TArray< FName > &OutModules) const
Definition ModuleManager.cpp:257
CORE_API ~FModuleManager()
Definition ModuleManager.cpp:233
CORE_API IModuleInterface * GetModule(const FName InModuleName)
Definition ModuleManager.cpp:1478
CORE_API void UnloadOrAbandonModuleWithCallback(const FName InModuleName, FOutputDevice &Ar)
Definition ModuleManager.cpp:1974
CORE_API void OnObjectCleanup()
Definition ModuleManager.cpp:878
CORE_API void SaveCurrentStateForBootstrap(const TCHAR *Filename)
Definition ModuleManager.cpp:1750
static TModuleInterface * LoadModulePtr(const FName InModuleName)
Definition ModuleManager.h:395
CORE_API int32 GetModuleCount() const
Definition ModuleManager.cpp:2171
CORE_API bool UnloadModule(const FName InModuleName, bool bIsShutdown=false, bool bAllowUnloadCode=true)
Definition ModuleManager.cpp:1302
static CORE_API FModuleManager & Get()
Definition ModuleManager.cpp:199
TMulticastDelegateRegistration< void(FName, bool)> & OnProcessLoadedObjectsCallback()
Definition ModuleManager.h:543
static CORE_API const TCHAR * GetUBTConfiguration()
Definition ModuleManager.cpp:2079
CORE_API void AbandonModuleWithCallback(const FName InModuleName)
Definition ModuleManager.cpp:2000
CORE_API void AbandonModule(const FName InModuleName)
Definition ModuleManager.cpp:1389
FIsPackageLoadedCallback & IsPackageLoadedCallback()
Definition ModuleManager.h:576
CORE_API void AddModuleToModulesList(const FName InModuleName, FModuleManager::ModuleInfoRef &ModuleInfo)
Definition ModuleManager.cpp:432
CORE_API IModuleInterface * LoadModuleWithFailureReason(const FName InModuleName, EModuleLoadResult &OutFailureReason, ELoadModuleFlags InLoadModuleFlags=ELoadModuleFlags::None)
Definition ModuleManager.cpp:965
CORE_API IModuleInterface & LoadModuleChecked(const FName InModuleName)
Definition ModuleManager.cpp:952
CORE_API void UnloadModulesAtShutdown()
Definition ModuleManager.cpp:1419
static TModuleInterface & LoadModuleChecked(const FName InModuleName)
Definition ModuleManager.h:381
TTSMulticastDelegateRegistration< void(FName ModuleName, EModuleChangeReason ChangeReason)> & OnModulesChanged()
Definition ModuleManager.h:529
CORE_API void SetModuleFilename(FName ModuleName, const FString &Filename)
Definition ModuleManager.cpp:1725
CORE_API void AddExtraBinarySearchPaths()
Definition ModuleManager.cpp:2026
CORE_API void AddBinariesDirectory(const TCHAR *InDirectory, bool bIsGameDirectory)
Definition ModuleManager.cpp:2097
CORE_API FString GetGameBinariesDirectory() const
Definition ModuleManager.cpp:2148
TMulticastDelegateRegistration< void(TConstArrayView< FName >)> & OnModulesUnloaded()
Definition ModuleManager.h:553
CORE_API void SetGameBinariesDirectory(const TCHAR *InDirectory)
Definition ModuleManager.cpp:2135
CORE_API bool ModuleExists(const TCHAR *ModuleName, FString *OutModuleFilePath=nullptr) const
Definition ModuleManager.cpp:325
CORE_API void AddModule(const FName InModuleName)
Definition ModuleManager.cpp:445
CORE_API bool LoadModuleWithCallback(const FName InModuleName, FOutputDevice &Ar)
Definition ModuleManager.cpp:2013
CORE_API void ResetModulePathsCache()
Definition ModuleManager.cpp:1805
FModuleManager & operator=(const FModuleManager &)=delete
CORE_API void MakeUniqueModuleFilename(const FName InModuleName, FString &UniqueSuffix, FString &UniqueModuleFileName) const
Definition ModuleManager.cpp:2051
CORE_API FString GetModuleFilename(FName ModuleName) const
Definition ModuleManager.cpp:1720
CORE_API void StartProcessingNewlyLoadedObjects()
Definition ModuleManager.cpp:2089
static TModuleInterface & GetModuleChecked(const FName ModuleName)
Definition ModuleManager.h:342
static UE_FORCEINLINE_HINT TModuleInterface * GetModulePtr(const FName ModuleName)
Definition ModuleManager.h:365
FModuleManager(const FModuleManager &)=delete
CORE_API bool IsModuleSafeToUse(const FName InModuleName) const
Definition ModuleManager.cpp:1505
DECLARE_DELEGATE_RetVal_OneParam(bool, FIsPackageLoadedCallback, FName)
static CORE_API void TearDown()
Definition ModuleManager.cpp:193
CORE_API bool DoesLoadedModuleHaveUObjects(const FName ModuleName) const
Definition ModuleManager.cpp:2161
friend FArchive & operator<<(FArchive &Ar, FModuleManager &ModuleManager)
Definition ModuleManager.cpp:1762
CORE_API bool IsModuleUpToDate(const FName InModuleName) const
Definition ModuleManager.cpp:372
Definition NameTypes.h:617
CORE_API FString ToString() const
Definition UnrealNames.cpp:3537
Definition OutputDevice.h:133
Definition ModuleManager.h:809
static IModuleInterface * InitializeModule()
Definition ModuleManager.h:830
FStaticallyLinkedModuleRegistrant(FLazyName InModuleName)
Definition ModuleManager.h:815
Definition ModuleInterface.h:14
Definition DelegateSignatureImpl.inl:67
Definition DelegateSignatureImpl.inl:310
Definition UnrealString.h.inl:34
Definition DelegateSignatureImpl.inl:725
Definition DelegateSignatureImpl.inl:1029
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition ContainerAllocationPolicies.h:894
Definition UniquePtr.h:107
implementation
Definition PlayInEditorLoadingScope.h:8
TOptional< FModuleManager > & GetModuleManagerSingleton()
Definition ModuleManager.cpp:186
FORCEINLINE UE_STRING_CLASS RhsType && Rhs
Definition String.cpp.inl:718
@ false
Definition radaudio_common.h:23
Definition ModuleManager.h:151
FName Name
Definition ModuleManager.h:153
FString FilePath
Definition ModuleManager.h:156
Definition ModuleManager.h:127
FModuleStatus()
Definition ModuleManager.h:129
bool bIsLoaded
Definition ModuleManager.h:141
FString FilePath
Definition ModuleManager.h:138
bool bIsGameModule
Definition ModuleManager.h:144
FString Name
Definition ModuleManager.h:135
Definition Optional.h:131