关于ILRunTime + FGUI 组合使用的补充
前言
由于現在項目使用的是ILRunTime熱更方式配合FGUI的框架開發,所以項目開發過程中踩了一些坑,由于網上關于ILRunTime +FGUI 的組合用法材料比較有限,所以來記錄一下踩坑的問題、與原因以及解決方法。
問題
報強制轉換錯誤,后來定位到了問題:
發生前提
當前項目規劃把FGUI源碼放在主工程,UI業務都寫在熱更工程中,所以會需要用到跨域繼承,我注冊了GComponent的適配器,工具類UI_Denglu繼承了GComponent,并且CLR綁定了UIPackage的CreateObject方法。
解釋
抽出問題,舉個例子
主工程中 類A 繼承類B
熱更工程 類C繼承主工程類A (已經注冊了跨域適配器)
如果在熱工程中通過工廠類創建得到類C的對象(并且對創建的方法做了CLR綁定),返回值為類B,ILRunTime無法得知類C需要跨域繼承類B,這時候需要強轉為類C時會報轉換錯誤。
解決方法
1.重寫創建方法,使其返回值為類A,由于類A注冊了跨域繼承適配器,轉換為類C沒有問題。
2.如果創建方法使用不很頻繁,可以不使用CLR綁定,但是會犧牲性能使用反射來調用主工程的創建方法。
總結
使用ILRunTime盡量避免間接繼承類的轉換。
補充
類似問題還有 GComponent 的 GetChildAt 和 GetChild 方法,他們也是返回GObject對象,如果項目中需要轉換為繼承GComponent的組件也會出現轉換問題。
總結
以上是生活随笔為你收集整理的关于ILRunTime + FGUI 组合使用的补充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python创建虚拟串口
- 下一篇: HP proliant服务器从usb启动