1. 程式人生 > >qt+osg+vs2008中(msvcr90.dll) 處最可能的異常: 0xC0000005的問題解決

qt+osg+vs2008中(msvcr90.dll) 處最可能的異常: 0xC0000005的問題解決

 用此法得到了解決。

3. 另一個執行時異常, Debug時出現:
“Unhandled exception at 0×6c1f4774 (msvcr90.dll) in TestMagick.exe: 0xC0000005: Access violation reading location 0xcccccccc.”

同樣在官方論壇上找到答案:是Project屬性配置引起的, Project Properties->Configuration Properties->C/C++->Code Generation->Runtime Library, 把Multi-threaded Debug DLL (/MDd)改為Multi-threaded DLL (/MD)

, 而/MDd是Debug的預設選項. 不過文中提到的有關”_DEBUG”改為”NDEBUG”倒不必.

五月 21st, 2009

在C++中使用ImageMagick(簡稱Magick)處理一些圖片, 碰到幾個問題並嘗試找到了解決方案.

Magick官方網站下載的ImageMagick-6.5.2-4-Q16-windows-dll.exe, 安裝時選上C++開發包. 開發用的IDE是Visual Studio 2008.

1. Magick對中文的路徑名支援不是很好, 比如

1
2
Image img;
img.read("e://頭像 小頭//小王.jpg");  // 讀取失敗

這種中文路徑在OpenCV中是沒問題的. 不過Magick並非不支援中文路徑名, 只是需要先對中文路徑進行utf-8編碼

. 如下面的轉換程式碼, 在windows下通過MultiByteToWideChar和MultiByteToWideChar實現, 需要包含標頭檔案wtypes.h, 細節可檢視MSDN. 在linux下據說可以用iconv實現.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// use utf8 to encode the string and store as char*. Need #include <wtypes.h>.
// Not support linux, ps. iconv can do the same thing in linux.
// src -- a string to be converted, may contains characters like Chinese. // return -- a point to a string which allocated in heap, it should be delete[]. char* acp2utf8(const char* src) { int len = strlen(src); int n = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0); char* res; if (len + 1 == n) { // all ascii characters, which the same as utf8 encoding string. res = new char[n]; strncpy(res, src, n); } else { WCHAR* ws = new WCHAR[n]; MultiByteToWideChar(CP_ACP, 0, src, -1, ws, n-1); ws[n-1] = 0;   n = WideCharToMultiByte(CP_UTF8, 0, ws, -1, NULL, 0, NULL, NULL); res = new char[n]; WideCharToMultiByte(CP_UTF8, 0, ws, -1, res, n-1, NULL, NULL); res[n-1] = 0;   delete[] ws; }   return res; }

這樣進行呼叫時, 只要:

1
2
3
4
char* fn = acp2utf8("e://頭像 小頭//小王.jpg");
Image img;
img.read(fn);
delete[] fn; // 別忘釋放記憶體

2. 編譯通過, 執行時碰到error(可在Debug模式下看到, Release下可能就直接退出了):
“Application Error
The application failed to initialize properly (0xc00000fd). Click on OK to terminate the application.”

很莫名其妙, 正常安裝應該不會碰到. 重灌系統後, 直接拿上次安裝的dll來用就會出錯這個錯誤. Google到答案: 因為它依賴登錄檔!! 重新安裝一下就好了.
“The binary distribution of ImageMagick for Windows requires an installer to properly set entries in the Windows registry. What you want is an “uninstalled” version of ImageMagick. You will need to build ImageMagick from source which by default permits you to gather the binaries and configuration files into one folder and redistribute them free of dependencies on the Windows registry.”

3. 另一個執行時異常, Debug時出現:
“Unhandled exception at 0×6c1f4774 (msvcr90.dll) in TestMagick.exe: 0xC0000005: Access violation reading location 0xcccccccc.”

同樣在官方論壇上找到答案:是Project屬性配置引起的, Project Properties->Configuration Properties->C/C++->Code Generation->Runtime Library, 把Multi-threaded Debug DLL (/MDd)改為Multi-threaded DLL (/MD), 而/MDd是Debug的預設選項. 不過文中提到的有關”_DEBUG”改為”NDEBUG”倒不必.

“Well, I think I have it…… Turns out I didn’t quite have all the settings the same. But after a series of experiments and keeping track of all changes/differences between Debug and Release I think I’ve got it nailed down. In the “Project Properties” page, under “Configuration Properties/C++/Code Generation” make sure the “Runtime Library” is set to “Multi-Threaded DLL (/MD)” and not to “Multi-Threaded Debug DLL (/MDd)” which is the default for the Debug setup. Then under “Configuration Properties/C++/Preprocessor” you have to change the “Preprocessor Definition” that is set to “_DEBUG” to “NDEBUG”. I assume that this flag is used in the header files for the Magick++.h files somewhere. When I change these two parameters then everything works in the debug build environment.”

至於原因, 查了下MSDN, 找到這麼一句話, “All modules passed to a given invocation of the linker must have been compiled with the same run-time library compiler option (/MD, /MT, /LD). “, 可能可以解釋.

相關推薦

qt+osg+vs2008(msvcr90.dll) 可能異常: 0xC0000005的問題解決

 用此法得到了解決。 3. 另一個執行時異常, Debug時出現:“Unhandled exception at 0×6c1f4774 (msvcr90.dll) in TestMagick.exe: 0xC0000005: Access violation reading

acad.exe 的 0x25c70fc2 (???.arx) 可能異常: 0xC0000005: 讀取位置 0x0000009c 時發生訪問衝突

1.   修改了一個以前的arx程式,編譯通過後,載入時出錯,acad說它不是合法arx檔案。但是因為還沒走到DllMain(),所以vc也除錯不了,不知道那裡出錯,毫無頭緒。睡了一覺,覺得應該是全域性變數或者類的靜態成員初始化時出錯。 到網上搜了一下,有篇文章還行:http://

關於VS2008SLN檔案格式圖示未關聯之解決辦法

星期天在家安裝了ASP.NET MVC 1.0 和 Enterprise Library 4.1 後,發現我的所有.sln檔案圖示都沒有了,但還是能夠開啟專案。這下把我鬱悶了,在網上搜了搜,最終還是沒有找到解決辦法。 雖然沒有多大影響,但是總覺得不舒服,於是決定抽時間解決該問題。 找同事把他機子上的登錄檔備

Mybatisorg.apache.ibatis.binding.BindingException 異常問題解決

出現這個異常一般是以下幾個原因: 1. Mybatis傳入 多個引數,解決方案: ①多個引數中使用@Param註解進行修飾 public interface UserMapper { User selectUser(@Param("username") String userna

Qt與vs編寫的dll通訊遇的坑

一、前言: 因為實際開發過程中遇到Qt呼叫vs編寫的sdk,故用vs封裝成純C++的dll提供Qt使用,因為懶得遷移整個工程到Qt環境,畢竟沒學過Qt,光是搭建環境,怎麼使用creator就很多時間折騰了,時間成本很高。 二、新建vs的dll 1、生成dll、

Delete出錯分析總結(個人總結很到位) 0x0000007ff64426f87e(ucrtbased.dll)(處於dataa.exe)引發的異常

近日在除錯C++程式中new class 後delete 出現如下錯誤: * 0x0000007ff64426f87e(ucrtbased.dll)處(處於dataa.exe中)引發的異常:0xC0000005:讀取位置(0xffffffffffffff

VS2005、VS2008如何遮蔽討厭的MSVCR*.dll的引用

VS系列工具作為目前微軟主打的整合開發環境,在歷經了近20多年的發展後,到如今已經可以說是Windows平臺上各種IDE環境中的翹楚了。很多別的開發工具已經難望其項背了,如今VS2010也已經面市很長時間了,但是因為筆者囊中羞澀,無法升級硬體,所以也沒有辦法去進行那個18

vs2008新增QT並設定程式碼自動補全

【1】QT程式設計——QT集成於Microsoft Visual Studio中 集成於VS的QT安裝步驟:       1.首先安裝Microsoft Visual Studio 

VS2008 沒有QT的程式碼智慧提示

2008本身自帶有註釋,本人不太喜歡VC助手把介面弄的很煩。配好QT環境之後,發現QT的程式碼沒有智慧提示,VC的程式碼卻有智慧提示。 原因是QT的一些檔案沒有包含到VS2008中,做了以下包含:  專案屬性->Configuration Properties->VC++ Director

全面掌握VS2008 的global.asax特殊之

在使用 VS2005 或 VS2008 設計系統並且加入了全域性控制檔案 Global.asax 的話,VS2003 以上的版本都是預設沒有 Global.asax.cs 檔案的!也就是說,只能把處理程式碼直接寫進 Global.asax 檔案裡,而不再提供後臺程式碼庫。可是這樣做的話,在虛擬視窗或開源的情況

求數組反復次數多的元素

down add 時間復雜度 空間 append 鍵值對 Language trac mod 1.問題描寫敘述   比如:數組a={2,3,1,5,5,5,5,7,8,1}。元素2、3、7、8各出現1次。1出現兩次。5出現4次,則反復次數最多的元素為5

求一個字符串連續出現次數多的子串

article 規律 生成 clu 一次 strong tor first sub 題目:求一個字符串中連續出現的次數最多的子串。 例如,字符串“abababc”,最多連續出現的為ab,連續出現三次。 思路: 例如字符串“abababc”,最多連續出現的為ab,連續出現

均值濾波,值濾波,小值濾波

fin proc repeat 效果 mod ava rom static 包含 http://blog.csdn.net/fastbox/article/details/7984721 討論如何使用卷積作為數學工具來處理圖像,實現圖像的濾波,其方法包含以下幾種,均值 濾波

phpstudy啟用php_intl之後發生“計算機丟失*.dll”錯誤的解決方法

php_intl最近新升級了新版的phpstudy,想試試php7感覺如何。結果發現,安裝完成之後,當開啟了php_intl擴展的時候,讓人頭疼的問題來了。每次啟動phpstudy,都會報出一個錯誤"無法啟動此程序,因為計算機中丟失icuio57.dll。嘗試重新安裝該程序以解決此問題"。然後就認為是系統中缺

在已有QT項目添加多個UI布局界面

技術 obj new ace win 創建 explicit 界面 否則 1、在工程中右鍵->添加新文件,按圖選擇 2、選擇窗口部件 3、創建UI控制類 註意上圖紅框中命名按實際需要定義,否則後期改動要修改UI文件參數 4、修改UI文件,框1是窗口部件父類,框2

在Visual Studio開發的項目引用GACdll

gac 9.png oos sort ast can ren property win Open the windows Run dialog (Windows Key + r) Type C:\Windows\assembly\gac_msil. This is som

【LeetCode】數組-2(628)-數組三個數相乘

負數 [] product leet ont 沒有 程序 時間復雜度 array 題目不難: 思路一(排序取兩端) 先排序,最後三個數相乘即可。(很快就想到了,但是沒想全面 [??] ) 缺陷:沒有考慮到有負數的情況,當至少有兩個負數時,需要判斷 最大數乘兩個最小的負數 和

算法總結之 數組未出現的小正整數

urn log 既然 color 一起 style 時間復雜度 復雜度 最終 給定一個無序整型數組arr,找到數組中未出現的最小正整數 解題思路非常好,需要好好學習一下,很邏輯 如果arr長度為N, 最優解可以做到時間復雜度O(N) 額外空間復雜度O(1) 1、

Qt學習:VS使用Qt出現的常見問題:QDebug和QPrintDialog的使用.

window 軟件 編程 計算機 在VS中常常會有小夥伴不知道如何使用QDebug和QPrintDialog.下面我用VS2013來教你們如何去操作.QDebug 相信很多小夥伴們發現在qt creator中使用qDebug()是可以輕易的輸出在下面的,但是在vs中在程序明明沒有錯誤的情況下,

JAVA關於日期的常見的操作

before 基於 form edate str ack system mes 格式 //獲取當前系統的時間戳 long times = System.currentTimeMillis(); //創建一個當前日期對象 Da