在UE4中可运行程序(EXE)引用Module可以通过动态调用和静态引用两种方式,这通过当前应用程序工程的目标编译选项决定,即由*.target.cs
中的 LinkType决定。
1)LinkType = TargetLinkType.Monolithic时,
编译采用实现包含或者静态链接等方式,不同模块中的
代码编译后链接到一个单独的可执行文件中(可执行文件相对会比较大),程序运行时不依赖其他 Module 的 DLL,此处对应在项目代码中S_MONOLITHIC宏的值为true
应用系统通过FModuleManager::LoadModuleWithFailureReason来加载Module,在第一次加载Module时函数调用 ProcessPendingStaticallyLinkedModuleInitializers(); 此函数将建立静态链接库的映射表StaticallyLinkedModuleInitializers,是一个TMap<FName, FInitializeStaticallyLinkedModule>,可以通过关键字查找Module,找到后通过
ModuleInfo->Module = TUniquePtr<IModuleInterface>(ModuleInitializer.Execute());
初始化和加载Module,后面程序就可以找到Module,引用Module中定义的对象了。
**关键是静态库是如何注册的?