arx出現的bug

轉載arx出現的bug:添加鏈接描述
1.

修改了一個以前的arx程序,編譯通過後,加載時出錯,acad說它不是合法arx文件。但是因爲還沒走到DllMain(),所以vc也調試不了,不知道那裏出錯,毫無頭緒。睡了一覺,覺得應該是全局變量或者類的靜態成員初始化時出錯。

到網上搜了一下,有篇文章還行:http://blog.csdn.net/xingzihe/article/details/9032789,爲閱讀方便,部分內容轉帖如下:

Windows 進程一般放在 0x00400000 的地址,0x00400000 是所有版本的 Windows 能使用的最低地址,進程實例句柄的值總是和它的基地址相同,所有未被初始化的自動變量都會設上 0xCCCCCCCC。數值類似0xC0000005等,通常是debug模式下的未附值的指針(未初始化)。

稍微筆記一下上文:

0x00400000=4M=4x1024x1024=4x1048576=4194304, 1K=1024=0x400, 1M=1024x1024=0x100000

0xCCCCCCCC=0b11001100110011001100110011001100=3435973836
0xC0000005 =0b11000000000000000000000000000101=3221225477

和我的感覺一樣,應該是指針越界訪問或指針未初始化就使用這樣的問題。最後果然是全局變量初始化順序的問題,一個全局變量的初始化依賴了另一個全局變量的初始化,而c/c++中,不同編譯單元的全局量的初始化順序是沒有保證的。稍作修改,果然重新運行起來了!

另外,初始化全局變量處也是可以下斷點的。

折騰了好久,發現沒有調試器的幫助,自己的腦子都僵住了,幾乎不會解決問題了,哈

新建了一個空的arx工程,編譯加載都正常,屬性 | 鏈接器 | 輸入 | 附加依賴項 中加入了以前的一個arx的lib(並沒有用到其中導出的變量或函數),編譯通過但是加載不了了。

說是:???.arx 與此版本的 AutoCAD 不兼容。AcRxDynamicLinker加載"???.arx"失敗。

研究了2天,是依賴的某個dll沒找到?是某個調用的arx不兼容,是需要對某個arx使用linker delayload?等等。偶然發現,以前一個工程也是依賴了這個arx,一看,那兒是用了#pragma comment(lib, “???.lib”), 不是在工程的屬性中設置在附加依賴項中。改用#pragma comment(lib, …)果然成功加載。這兩種引入庫的方式有什麼區別?不知道。

也有可能用附加依賴項的方式不行,是因爲引入的這個.arx庫不是用最兼容的vs版本編譯的(vc2010, acad2012),沒試驗驗證過是否如此。

向一個arx工程中加入了一個類,編譯通過,加載時說:

???.arx 無法找到所需的動態鏈接庫或其他文件。
英文是:???.arx cannot find a dll or other file that it needs.

費了半天勁,確認所有用到的庫中,除了windows和vc, win sdk自帶的,都放在該???.arx同一個目錄中了,應該不存在缺少dll或路徑找不到的問題。有目的、無目的的修改、編譯,加載,這種盲目的嘗試了1天多。後來沒什麼招了,忽地想起網上看到有一個帖子說,用windbg能看到更多的信息,也不太抱希望,因爲感覺又不是無源代碼調試,vc的調試器,不會比windbg少什麼信息。但是既然是盲目地試,也不在乎在試一下。用windbg環境下附加到acad.exe,加載???.arx居然成功了。這下知道基本上是因爲acad.exe沒找到???.arx所在目錄下的另一個所依賴的arx。在acad的支持路徑下加入該???.arx所在目錄,果然加載成功。

奇怪的是,所有的dll和arx(除了windows和vc,win sdk自帶的庫)都放在一個目錄下,而且之前加載其它dll時(都在與???.arx同一個目錄下,沒有子目錄)也沒有指定acad的支持文件路徑,都加載成功了。這些都只有詳細地瞭解了acad加載庫的過程和搜尋庫的規則才能徹底明白。

實驗了一下,帶/b “xxx.scr”參數啓動acad.exe會不認arx所在的目錄。把該目錄加到acad的支持路徑或者os的環境變量path,或者當作快捷方式的起始位置都可以。

不帶/b參數,空參數啓動acad.exe,手動arx加載各arx也能成功。
————————————————
版權聲明:本文爲CSDN博主「thinktalk」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/thinktalk/article/details/74279715

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章