創作內容

1 GP

全域變數的載入時機

作者:likwueron│2015-06-22 12:23:31│巴幣:2│人氣:194
在跑qtlua interpreter的互動模式時,我發現在Windows版居然沒有QWidget等Qt提供的元件。
這表示在Windows上它完全沒辦法當language binding。
說真的,這很奇怪,所以要開始找原因了。

那些預設的Qt元件是透過qtluaqmetaobjecttable.cc定義的。
而具體處理這張表的是定義在qtluaqtlib.cc中的QMetaObjectTable。
這個類別只有生出一個檔案變數。

老實說我真的看不出來這張表有什麼問題,我只好開除錯看看是怎麼一回事。
結果很奇怪的是,在QMetaObjectTable建構的時候,所有Qt內建的staticMetaObject通通取到0x0,也就是在這個時間點它們還沒建立。
從另一方面來說,Linux版肯定是相反,所有的staticMetaObject都建立好了。

我只能猜說,QMetaObjectTable在Windows上建立的時間比Qt完全載入的時間還早。
所以要做的部份想來也只有:延遲QMetaObjectTable建立的時間點。
基本上就是改用指標,然後找一個可以的時機建立它,且設定好記憶體管理。



下載,內含範例。原始碼
呃,這包漏了一個dll,請把其中的platforms資料夾放在和執行檔同一個位置。

注意:因為改用Qt5,所以就沒辦法在XP上面跑了。
雖然說官方有提供編譯指引,但我沒時間把Qt5整個重編譯一次。
不過我想現在跑XP的人應該很少了吧?好吧,我是說我希望如此。

還有,Qt5要包的東西多很多,大概肥了2.5倍吧?
要弄出基本的圖形介面後面就拖了43MB的DLL,就算壓縮後還是有17MB多。
不過這只是我在抱怨就是了,因為網路太慢,上傳只有10KB/s...



話說,Qamer中有一些全域指標,搞不好它們之中也會引發類似的問題。
回頭把它們處理掉好了,這樣或許會比較好。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2874438
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:Qt|Lua|腳本|全域變數

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★iqandadie 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:加入物件的成員存取限制... 後一篇:部屬Qt程式...

追蹤私訊切換新版閱覽

作品資料夾

hyzgdivina喜歡虹咲的LLer
我的小屋裡有很多又香又甜的Hoenn繪師虹咲漫畫翻譯喔!歡迎LoveLiver來我的小屋裡坐坐~看更多我要大聲說昨天20:43


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】