UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ModuleManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "Containers/Map.h"
9#include "CoreTypes.h"
10#include "Delegates/Delegate.h"
11#include "HAL/CriticalSection.h"
12#include "HAL/PlatformCrt.h"
15#include "Misc/Build.h"
16#include "Misc/CoreMisc.h"
17#include "Misc/EnumClassFlags.h"
18#include "Misc/Optional.h"
22#include "Templates/Atomic.h"
24#include "Templates/UniquePtr.h"
26#include "UObject/NameTypes.h"
27
28class FArchive;
29class FModuleManager;
30class FOutputDevice;
31class UClass;
32class UWorld;
33
34#if WITH_HOT_RELOAD
36 UE_DEPRECATED(5.0, "GIsHotReload has been deprecated, use IsReloadActive to test to see if a reload is in progress.")
38#endif
39
40#if WITH_ENGINE
42#endif
43
44
68
70
75{
77 Success,
78
81};
82
89{
92
93 /* A module has been unloaded and should no longer be used. */
95
98};
99
100
102{
103 None = 0x00,
104
105 // Display the loading of an up-to-date module
107};
108
110
111
113{
114 None = 0x0,
115
116 // Print to the log any failure information
117 LogFailures = 1 << 0,
118};
119
121
122
123
127{
130 : bIsLoaded(false)
131 , bIsGameModule(false)
132 { }
133
135 FString Name;
136
138 FString FilePath;
139
142
145};
146
151{
154
156 FString FilePath;
157};
158
159namespace UE::Core::Private
160{
162}
163
171 : private FSelfRegisteringExec
172{
173public:
174
179
180
186 static CORE_API FModuleManager& Get( );
187
189 static CORE_API void TearDown();
190
191
199
205 CORE_API void AddModule( const FName InModuleName );
206
207#if !IS_MONOLITHIC
209#endif // !IS_MONOLITHIC
210
219
226 CORE_API bool IsModuleSafeToUse( const FName InModuleName ) const;
227
237 CORE_API bool IsModuleLoaded( const FName InModuleName ) const;
238
248
257
267
278
288
296
308 CORE_API bool UnloadModule( const FName InModuleName, bool bIsShutdown = false, bool bAllowUnloadCode = true );
309
318
326
331
341 template<typename TModuleInterface>
342 static TModuleInterface& GetModuleChecked( const FName ModuleName )
343 {
345
346 checkf(ModuleManager.IsModuleLoaded(ModuleName), TEXT("Tried to get module interface for unloaded module: '%s'"), *(ModuleName.ToString()));
347 return static_cast<TModuleInterface&>(*ModuleManager.GetModule(ModuleName));
348 }
349
350private:
351 static CORE_API IModuleInterface* GetModulePtr_Internal(FName ModuleName);
352
354
355public:
356
364 template<typename TModuleInterface>
366 {
367 return static_cast<TModuleInterface*>(GetModulePtr_Internal(ModuleName));
368 }
369
380 template<typename TModuleInterface>
386
394 template<typename TModuleInterface>
399
408
418 CORE_API bool ModuleExists(const TCHAR* ModuleName, FString* OutModuleFilePath = nullptr) const;
419
426
437
438
441
442
444
452
458
461
465 CORE_API void LoadModuleBinaryOnly(FName ModuleName);
466
473
477 CORE_API FString GetGameBinariesDirectory() const;
478
479#if !IS_MONOLITHIC
486 CORE_API bool IsModuleUpToDate( const FName InModuleName ) const;
487#endif
488
496 CORE_API bool DoesLoadedModuleHaveUObjects( const FName ModuleName ) const;
497
503 static CORE_API const TCHAR* GetUBTConfiguration( );
504
505#if !IS_MONOLITHIC
507 CORE_API FString GetModuleFilename(FName ModuleName) const;
508
510 CORE_API void SetModuleFilename(FName ModuleName, const FString& Filename);
511
514
516 CORE_API void SaveCurrentStateForBootstrap(const TCHAR* Filename);
517#endif
518
528 using FModulesChangedEvent UE_DEPRECATED(5.5, "The FModulesChangedEvent typedef has been deprecated - use TTSMulticastDelegateRegistration<void(FName, EModuleChangeReason)> instead.") = TTSMulticastDelegate<void(FName ModuleName, EModuleChangeReason ChangeReason)>;
530 {
531 return ModulesChangedEvent;
532 }
533
542 using ProcessLoadedObjectsEvent UE_DEPRECATED(5.5, "The ProcessLoadedObjectsEvent typedef has been deprecated - use TMulticastDelegateRegistration<void(FName, bool)> instead.") = TMulticastDelegate<void(FName, bool)>;
544 {
545 return ProcessLoadedObjectsCallback;
546 }
547
554 {
555 return OnModulesUnloadCallback;
556 }
557
564 {
565 return CheckLiveObjectsInModulesCallback;
566 }
567
577 {
578 return IsPackageLoaded;
579 }
580
581protected:
582 // FSelfRegisteringExec interface.
583 CORE_API virtual bool Exec_Dev( UWorld* Inworld, const TCHAR* Cmd, FOutputDevice& Ar ) override;
584
585private:
587 struct FPrivateToken { explicit FPrivateToken() = default; };
588
589public:
595 CORE_API FModuleManager(FPrivateToken);
598
599private:
603 class FModuleInfo
604 {
605 public:
606
608 FString OriginalFilename;
609
611 FString Filename;
612
614 void* Handle;
615
618
620 bool bWasUnloadedAtShutdown;
621
623 TAtomic<bool> bIsReady;
624
626 int32 LoadOrder;
627
629 static int32 CurrentLoadOrder;
630
631 public:
632
634 FModuleInfo()
635 : Handle(nullptr)
636 , bWasUnloadedAtShutdown(false)
637 , bIsReady(false)
638 , LoadOrder(CurrentLoadOrder++)
639 { }
640
641 ~FModuleInfo()
642 {
643 }
644 };
645
648
650 typedef TMap<FName, ModuleInfoRef> FModuleMap;
651
652public:
657
659
662
663#if UE_MERGED_MODULES && !UE_BUILD_SHIPPING
664
667
670
673
674#endif // UE_MERGED_MODULES && !UE_BUILD_SHIPPING
675
678
680private:
681 static CORE_API void WarnIfItWasntSafeToLoadHere(const FName InModuleName);
682
684 CORE_API ModuleInfoPtr FindModule(FName InModuleName);
685 CORE_API ModuleInfoRef FindModuleChecked(FName InModuleName);
686
688 {
689 return const_cast<FModuleManager*>(this)->FindModule(InModuleName);
690 }
691
693 {
694 return const_cast<FModuleManager*>(this)->FindModuleChecked(InModuleName);
695 }
696
697#if !IS_MONOLITHIC
699 CORE_API void FindModulePaths(const TCHAR *NamePattern, TMap<FName, FString> &OutModulePaths) const;
700
702 CORE_API void FindModulePathsInDirectory(const FString &DirectoryName, bool bIsGameDirectory, TMap<FName, FString> &OutModulePaths) const;
703
705 CORE_API void SerializeStateForBootstrap_Impl(FArchive& Ar);
706
708 CORE_API void RefreshModuleFilenameFromManifestImpl(const FName InModuleName, FModuleInfo& ModuleInfo);
709
711 void* InternalLoadLibrary(FName ModuleName, const FString& ModuleFileToLoad);
712
714 void InternalFreeLibrary(FName ModuleName, void* Handle);
715
716#if UE_MERGED_MODULES
717
720
723
726
727#endif // UE_MERGED_MODULES
728
729
730#endif
731
733 CORE_API void ProcessPendingStaticallyLinkedModuleInitializers() const;
734
735private:
737 FModuleMap Modules;
738
742 mutable TArray<TPair<FLazyName, FInitializeStaticallyLinkedModule>, TInlineAllocator<16>> PendingStaticallyLinkedModuleInitializers;
743
745 mutable TMap<FName, FInitializeStaticallyLinkedModule> StaticallyLinkedModuleInitializers;
746
748 bool bCanProcessNewlyLoadedObjects;
749
751 bool bExtraBinarySearchPathsAdded;
752
754 bool bIsLoadingDynamicLibrary;
755
757 mutable TMap<FName, FString> ModulePathsCache;
758
761 TTSMulticastDelegate<void(FName ModuleName, EModuleChangeReason ChangeReason)> ModulesChangedEvent;
762
764 TMulticastDelegate<void(FName, bool)> ProcessLoadedObjectsCallback;
765
767 TMulticastDelegate<void(TConstArrayView<FName>)> OnModulesUnloadCallback;
768
770 TDelegate<bool(TConstArrayView<FName>)> CheckLiveObjectsInModulesCallback;
771
774 FIsPackageLoadedCallback IsPackageLoaded;
775
777 mutable TArray<FString> EngineBinariesDirectories;
778 mutable TArray<FString> PendingEngineBinariesDirectories;
779
781 mutable TArray<FString> GameBinariesDirectories;
782 mutable TArray<FString> PendingGameBinariesDirectories;
783
785 mutable TOptional<FString> BuildId;
786
788 mutable FCriticalSection ModulesCriticalSection;
789
790#if UE_MERGED_MODULES
791
794
797
799 mutable TMap<FString, TArray<FString>> LibraryDependencies;
800
801#endif // UE_MERGED_MODULES
802};
803
807template< class ModuleClass >
809{
810public:
811
821
831 {
832 return new ModuleClass();
833 }
834};
835
844typedef IModuleInterface* ( *FInitializeModuleFunctionPtr )( void );
845
846
852{
853public:
856
858
859private:
862 const TCHAR* Name;
863 const TCHAR* Name2;
865};
866
867
872 : public IModuleInterface
873{ };
874
875
880 : public FDefaultModuleImpl
881{
887 virtual bool IsGameModule() const override
888 {
889 return true;
890 }
891};
892
909namespace UE::Core::Private
910{
911 constexpr bool ModuleNameEquals(const char* Lhs, const char* Rhs)
912 {
913 for (;;)
914 {
915 if (*Lhs != *Rhs)
916 {
917 return false;
918 }
919
920 if (*Lhs == '\0')
921 {
922 return true;
923 }
924
925 ++Lhs;
926 ++Rhs;
927 }
928 }
929}
930#if IS_MONOLITHIC || UE_MERGED_MODULES
931
932 // If we're linking monolithically we assume all modules are linked in with the main binary.
933 #define IMPLEMENT_MODULE( ModuleImplClass, ModuleName ) \
934 \
935 static FStaticallyLinkedModuleRegistrant< ModuleImplClass > ModuleRegistrant##ModuleName( TEXT(#ModuleName) ); \
936 /* Forced reference to this function is added by the linker to check that each module uses IMPLEMENT_MODULE */ \
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)
939
940#else
941
942 #define IMPLEMENT_MODULE( ModuleImplClass, ModuleName ) \
943 \
944 \
945 /* InitializeModule function, called by module manager after this module's DLL has been loaded */ \
946 \
947 /* @return Returns an instance of this module */ \
948 \
949 static IModuleInterface* Initialize##ModuleName##Module() \
950 { \
951 return new ModuleImplClass(); \
952 } \
953 static FModuleInitializerEntry ModuleName##InitializerEntry(TEXT(#ModuleName), Initialize##ModuleName##Module, TEXT(UE_MODULE_NAME)); \
954 /* Forced reference to this function is added by the linker to check that each module uses IMPLEMENT_MODULE */ \
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)
957
958#endif //IS_MONOLITHIC
959
960
971#define IMPLEMENT_GAME_MODULE( ModuleImplClass, ModuleName ) \
972 IMPLEMENT_MODULE( ModuleImplClass, ModuleName )
973
974
978#if PLATFORM_DESKTOP
979 #ifdef UE_ENGINE_DIRECTORY
980 #define IMPLEMENT_FOREIGN_ENGINE_DIR() const TCHAR *GForeignEngineDir = TEXT( UE_ENGINE_DIRECTORY );
981 #else
982 #define IMPLEMENT_FOREIGN_ENGINE_DIR() const TCHAR *GForeignEngineDir = nullptr;
983 #endif
984#else
985 #define IMPLEMENT_FOREIGN_ENGINE_DIR()
986#endif
987
991#define UE_LIST_ARGUMENT(...) __VA_ARGS__
992
996#define UE_REGISTER_SIGNING_KEY(ExponentValue, ModulusValue) \
997 struct FSigningKeyRegistration \
998 { \
999 FSigningKeyRegistration() \
1000 { \
1001 extern CORE_API void RegisterSigningKeyCallback(void (*)(TArray<uint8>&, TArray<uint8>&)); \
1002 RegisterSigningKeyCallback(&Callback); \
1003 } \
1004 static void Callback(TArray<uint8>& OutExponent, TArray<uint8>& OutModulus) \
1005 { \
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++) \
1011 { \
1012 OutExponent[ByteIdx] = Exponent[ByteIdx]; \
1013 } \
1014 for(int ByteIdx = 0; ByteIdx < UE_ARRAY_COUNT(Modulus); ByteIdx++) \
1015 { \
1016 OutModulus[ByteIdx] = Modulus[ByteIdx]; \
1017 } \
1018 } \
1019 } GSigningKeyRegistration;
1020
1024#define UE_REGISTER_ENCRYPTION_KEY(...) \
1025 struct FEncryptionKeyRegistration \
1026 { \
1027 FEncryptionKeyRegistration() \
1028 { \
1029 extern CORE_API void RegisterEncryptionKeyCallback(void (*)(unsigned char OutKey[32])); \
1030 RegisterEncryptionKeyCallback(&Callback); \
1031 } \
1032 static void Callback(unsigned char OutKey[32]) \
1033 { \
1034 const unsigned char Key[32] = { __VA_ARGS__ }; \
1035 for(int ByteIdx = 0; ByteIdx < 32; ByteIdx++) \
1036 { \
1037 OutKey[ByteIdx] = Key[ByteIdx]; \
1038 } \
1039 } \
1040 } GEncryptionKeyRegistration;
1041
1042#define IMPLEMENT_TARGET_NAME_REGISTRATION() \
1043 struct FTargetNameRegistration \
1044 { \
1045 FTargetNameRegistration() \
1046 { \
1047 FPlatformMisc::SetUBTTargetName(TEXT(PREPROCESSOR_TO_STRING(UE_TARGET_NAME))); \
1048 } \
1049 } GTargetNameRegistration;
1050
1051#if IS_PROGRAM
1052
1053 #if IS_MONOLITHIC
1054 #define IMPLEMENT_APPLICATION( ModuleName, GameName ) \
1055 /* For monolithic builds, we must statically define the game's name string (See Core.h) */ \
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;
1063
1064 #else
1065
1066 #define IMPLEMENT_APPLICATION( ModuleName, GameName ) \
1067 /* For non-monolithic programs, we must set the game's name string before main starts (See Core.h) */ \
1068 struct FAutoSet##ModuleName \
1069 { \
1070 FAutoSet##ModuleName() \
1071 { \
1072 FCString::Strncpy(GInternalProjectName, TEXT( GameName ), UE_ARRAY_COUNT(GInternalProjectName)); \
1073 } \
1074 } AutoSet##ModuleName; \
1075 PER_MODULE_BOILERPLATE_ANYLINK(FDefaultGameModuleImpl, ModuleName) \
1076 FEngineLoop GEngineLoop;
1077 #endif
1078
1079#else
1080
1084#if IS_MONOLITHIC
1085 #if PLATFORM_DESKTOP
1086
1087 #define IMPLEMENT_PRIMARY_GAME_MODULE( ModuleImplClass, ModuleName, DEPRECATED_GameName ) \
1088 /* For monolithic builds, we must statically define the game's name string (See Core.h) */ \
1089 TCHAR GInternalProjectName[64] = TEXT( PREPROCESSOR_TO_STRING(UE_PROJECT_NAME) ); \
1090 /* Implement the GIsGameAgnosticExe variable (See Core.h). */ \
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
1098
1099 #else //PLATFORM_DESKTOP
1100
1101 #define IMPLEMENT_PRIMARY_GAME_MODULE( ModuleImplClass, ModuleName, DEPRECATED_GameName ) \
1102 /* For monolithic builds, we must statically define the game's name string (See Core.h) */ \
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 ) \
1110 /* Implement the GIsGameAgnosticExe variable (See Core.h). */ \
1111 bool GIsGameAgnosticExe = false;
1112
1113 #endif //PLATFORM_DESKTOP
1114
1115#else //IS_MONOLITHIC
1116
1117 #define IMPLEMENT_PRIMARY_GAME_MODULE( ModuleImplClass, ModuleName, GameName ) \
1118 /* Nothing special to do for modular builds. The game name will be set via the command-line */ \
1119 IMPLEMENT_SIGNING_KEY_REGISTRATION() \
1120 IMPLEMENT_ENCRYPTION_KEY_REGISTRATION() \
1121 IMPLEMENT_TARGET_NAME_REGISTRATION() \
1122 IMPLEMENT_GAME_MODULE( ModuleImplClass, ModuleName )
1123#endif //IS_MONOLITHIC
1124
1125#endif
1126
1131{
1132 None,
1134#if WITH_HOT_RELOAD
1135 HotReload,
1136#endif
1137#if WITH_LIVE_CODING
1138 LiveCoding,
1139#endif
1140};
1141
1142class IReload;
1143
1144#if WITH_RELOAD
1154
1160
1165
1169CORE_API void EndReload();
1170#else
1172
1173inline bool IsReloadActive() { return false; }
1174
1175inline IReload* GetActiveReloadInterface() { return nullptr; }
1176#endif
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
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
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 CoreMisc.h:28
Definition ModuleManager.h:809
static IModuleInterface * InitializeModule()
Definition ModuleManager.h:830
FStaticallyLinkedModuleRegistrant(FLazyName InModuleName)
Definition ModuleManager.h:815
Definition ModuleInterface.h:14
Definition Reload.h:19
Definition Array.h:670
Definition Atomic.h:538
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
Definition Class.h:3793
Definition World.h:918
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