Qt與VC編程合作起齷齪


由於歷史原因,某軟件項目的界面采用QT,而后台用了VC,界面靜態調用了VC生成的dll,一直以來都能夠快樂的合作,然而最近出現兩個小問題,覺得兩者之間的合作並沒有想象的那么美好。

  1. 在VC下用多媒體定時器設計了一個10毫秒的定時器任務,由於某些原因在任務里加入了一個20毫秒的休眠(Sleep),這里不去深究設計的合理性,總之做了這么個設計,接着影響來了,QT界面的所有菜單(包括菜單欄菜單和右鍵菜單)都不能正常顯示,僅能顯示空白的菜單框,雖然框的大小並沒有變化,但菜單項消失了,別的地方並沒有什么異常,反復驗證,兩者存在絕對的因果關系,將定時器內的休眠去掉菜單項又恢復了,這里定時器的使用上雖然不合理,但難以理解為什么會影響菜單的繪制。
  2. 在VC下某類成員函數中將NEW出來的某對象賦給臨時指針變量,經若干操作將該指針傳遞給該類的成員指針,其操作過程造成了界面使用QVector容器類過程中,特定的某次申請(malloc)容器空間失敗(QT庫內部的操作),而去掉臨時指針變量,將對象指針直接賦給成員指針,軟件順利運行。通常malloc失敗有兩個原因,一是進程可支配的連續內存空間不足,二是操作越界,前者經檢查不存在,那就是后者了,但很難理解臨時的指針變量是怎樣影響malloc操作的。

    上述問題,如果深挖,一定是大坑,但意義不大。不過還是從中得到了點經驗:當標准庫運行異常,而又難以證明庫本身質量問題的情況下,回顧一下編程過程,界定是哪個步驟導致了異常,分析這個步驟,不妨做些改動和調整。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



作業六。合作編程 你們覺得我齷齪嗎? 齷齪之人做齷齪之事! QT與VC的區別 用VC 6開始Qt 4.5.2之旅 VC調用QT的UIDLL 用VC 6開始Qt 4.5.2之旅 QT能像vc那樣編譯控件嗎? 齷齪的新版weiphone。 [ZT]齷齪笑話一則
 
粤ICP备14056181号  © 2014-2020 ITdaan.com