日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

acad.exe 中的 0x25c70fc2 (???.arx) 处最可能的异常: 0xC0000005: 读取位置 0x0000009c 时发生访问冲突

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 acad.exe 中的 0x25c70fc2 (???.arx) 处最可能的异常: 0xC0000005: 读取位置 0x0000009c 时发生访问冲突 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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++中,不同編譯單元的全局量的初始化順序是沒有保證的。稍作修改,果然重新運行起來了!

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

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

2. ?

新建了一個空的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),沒試驗驗證過是否如此。

3. ?

向一個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也能成功。



總結

以上是生活随笔為你收集整理的acad.exe 中的 0x25c70fc2 (???.arx) 处最可能的异常: 0xC0000005: 读取位置 0x0000009c 时发生访问冲突的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。