首页 > 编程语言 >UE5 源码启动剖析

UE5 源码启动剖析

时间:2023-07-03 18:33:02浏览次数:45  
标签:__ const UnrealEditor C++ dll 剖析 源码 UE5 Slate

1一切的起点WinMain函数

对于Windows控制台,程序的入口是main函数

对于Windows窗口,程序的入口是WinMain函数

Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp

int32 WINAPI WinMain(_In_ HINSTANCE hInInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ char* pCmdLine, _In_ int32 nCmdShow)
{
	int32 Result = LaunchWindowsStartup(hInInstance, hPrevInstance, pCmdLine, nCmdShow, nullptr);
	LaunchWindowsShutdown();
	return Result;
}


LAUNCH_API int32 LaunchWindowsStartup( HINSTANCE hInInstance, HINSTANCE hPrevInstance, char*, int32 nCmdShow, const TCHAR* CmdLine )
{
  ...
  ErrorLevel = GuardedMain( CmdLine );
  ...
}


事件分发器

static void WinPumpMessages()
{
	TRACE_CPUPROFILER_EVENT_SCOPE(WinPumpMessages);
	{
		MSG Msg;
		while( PeekMessage(&Msg,NULL,0,0,PM_REMOVE) )
		{
			TranslateMessage( &Msg );
			DispatchMessage( &Msg );
		}
	}
}


事件循环

 	UnrealEditor-Slate.dll!SWindowTitleBar::MinimizeButton_OnClicked() 行 646	C++
 	[内联框架] UnrealEditor-Slate.dll!Invoke(FReply(SWindowTitleBar::*)()) 行 66	C++
 	[内联框架] UnrealEditor-Slate.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(FReply(SWindowTitleBar::*)() &) 行 327	C++
 	UnrealEditor-Slate.dll!TBaseSPMethodDelegateInstance<0,SWindowTitleBar,1,FReply __cdecl(void),FDefaultDelegateUserPolicy>::Execute() 行 295	C++
 	[内联框架] UnrealEditor-Slate.dll!TDelegate<FReply __cdecl(void),FDefaultDelegateUserPolicy>::Execute() 行 620	C++
 	UnrealEditor-Slate.dll!SButton::ExecuteOnClick() 行 465	C++
 	UnrealEditor-Slate.dll!SButton::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) 行 390	C++
 	UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent::__l8::<lambda>(const FArrangedWidget & TargetWidget, const FPointerEvent & Event) 行 5046	C++
 	UnrealEditor-Slate.dll!FEventRouter::Route<FReply,FEventRouter::FToLeafmostPolicy,FPointerEvent,FReply <lambda>(const FArrangedWidget &, const FPointerEvent &)>(FSlateApplication * ThisApplication, FEventRouter::FToLeafmostPolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l8::FReply <lambda>(const FArrangedWidget &, const FPointerEvent &) & Lambda, ESlateDebuggingInputEvent DebuggingInputEvent) 行 412	C++
 	UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) 行 5032	C++
 	UnrealEditor-Slate.dll!FSlateApplication::ProcessMouseButtonUpEvent(const FPointerEvent & MouseEvent) 行 5601	C++
 	UnrealEditor-Slate.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const UE::Math::TVector2<double> CursorPos) 行 5566	C++
 	UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) 行 2219	C++
 	UnrealEditor-ApplicationCore.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,1> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) 行 2726	C++
 	UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) 行 1895	C++
 	[内联框架] UnrealEditor-ApplicationCore.dll!WindowsApplication_WndProc(HWND__ *) 行 919	C++
 	UnrealEditor-ApplicationCore.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) 行 925	C++
 	[外部代码]	
 	[内联框架] UnrealEditor-ApplicationCore.dll!WinPumpMessages() 行 113	C++
>	UnrealEditor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) 行 142	C++
 	UnrealEditor.exe!FEngineLoop::Tick() 行 5293	C++
 	[内联框架] UnrealEditor.exe!EngineTick() 行 66	C++
 	UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) 行 202	C++
 	UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) 行 233	C++
 	UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) 行 282	C++
 	[外部代码]	

标签:__,const,UnrealEditor,C++,dll,剖析,源码,UE5,Slate
From: https://blog.51cto.com/fengyuzaitu/6614416

相关文章

  • 记录一下最近遇到的UE5 BUG
    1.UE5.2打包后,打开项目崩溃,提示:Assertionfailed:CastResult[File:D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Public\UObject\Field.h][Line:961] CastFieldCheckedfailedwith0x0000015001062400  0x00007ff69dd254b6YH.exe!FRigVMMemoryHandle::......
  • linux源码解读(三):文件系统——inode【转】
    转自:https://www.cnblogs.com/theseventhson/p/15622853.html众所周知,计算机系统在掉电后也能存储数据的就是磁盘了,所以大量数据大部分时间是存放在磁盘的;现在新买的PC,磁盘从数百G到1TB不等;服务器的磁盘从数十TB到上百TB,这么大的存储空间,该怎么高效地管理和使用了?站在硬件角度,cpu......
  • 视频直播源码,三段式(抽屉式)底部弹窗BottomSheet
    视频直播源码,三段式(抽屉式)底部弹窗BottomSheet自定义View继承CoordinatorLayout  /** *CreatedbyzGuion2022/7/11. *三段式底部弹窗 */classThreeBottomSheet:CoordinatorLayout{  privatevarmBinding:IncludeBottomSheetBinding  constructor(con......
  • 手机直播源码,设置透明背景(去掉蒙层)状态栏颜色不改变
    手机直播源码,设置透明背景(去掉蒙层)状态栏颜色不改变Dialog设置透明背景(去掉蒙层) //背景全透明window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))window!!.setDimAmount(0f)   ​     Dialog弹出时状态栏颜色不改变 //弹出时状态栏颜色不......
  • 网页直播源码知识分享:“直播卫士”,查杀病毒功能在此!
     不知道大家还记不记得当年的一个网络重大事件,一只可爱的熊猫拿着香席卷了众多用户的电脑,被这只熊猫席卷的电脑无一不出现系统崩溃、瘫痪的情况,而这只熊猫就是当年造成重大影响的一款电脑病毒:“熊猫烧香”。经过网络的发展,对于病毒的“侵袭”,各大厂商也发明了许多的查杀病毒软件......
  • 最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优
    Linux命令相关查看指标CPU指标vmstat指令vmstat-nm该命令用于每隔n秒采集系统的性能统计信息,共采集m次。[root@svr01]$vmstat13procs-----------memory-------------swap-------io------system-------cpu-----rbswpdfreebuffcachesiso......
  • LinuxDNS分析从入门到放弃(记一次有趣的dns问题排查记录,ping 源码分析,getaddrinfo源码
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  ubuntu18.04前言  我们这里有一块嵌入式板卡,当我们通过PING测试内网IP时,发现外网IP访问正常,但是测试域名访问一直报unknownhost。一般来说,在ubun......
  • Common BeanUtils组件的使用(源码)
    CommonBeanUtils组件方便了对JavaBean的使用。其中的一些类方法,使我们使用JavaBean得到了便利。 使用CommonBeanUtils组件需要三个Jar包,分别是commons-beanutils-1.8.0-BETA.jarcommons-logging-1.1.1.jarcommons-logging-api-1.1.1.jar 可从官网下载,不过为了方便,我把三个包传......
  • linux命令源码下载【转】
    一般来说,不同的命令可能隶属于不同的软件包,这样就没有一个地方会有所有命令的源代码。(命令的个数也会与你所安装的软件包有关)但是,一些常用的命令,例如basenamecatchgrpchmodchownchrootcksumcommcpcsplitcutdatedddfdirnameduechoenvexpandexprfactorfalsefm......
  • (六)Spring源码解析:Spring AOP源码解析
    〇、AOP概念Aspect:切面给业务方法增加到功能,切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。Pointcut:切入点切入点指声明的一个或多个连接点的集合,通过切入点指定一组方法。被标记为final......