CFileDialog 在使用sdk 后出现异常 Access violation
/*華麗的分割線+提醒線*/
//http://blog.csdn.net/lava555/article/details/7699905
一段打開文檔的代碼,前一段時間好好地,今天突然出問題了.Access violation 的異常,跟蹤發現出在CFileDialog析構的時候.
測試環境:winxp pro + sp2;?
編譯:vc6.0+sp5;
[cpp] view plaincopy搞了好久,才找到原因,就是因為在stdafx.h中加了下面的兩個宏;
[cpp] view plaincopy
去掉這兩個宏的話,沒問題.
如果非要用高版本的platform sdk的話,下面的方法也是一個解決辦法.
[cpp] view plaincopy
/******************************************************************************************************/
/*華麗的分割線-----------> bug
/******************************************************************************************************/
找到錯誤如下:
運行時態打開文件夾時程序崩潰。只好用messagebox逐一跟蹤。。。
最后找到的solution:
必須先初始化變量CFILEDIALOG定義的變量。debug狀態下默認自動初始化,但是release不能。
不過運行release模式也能運行。不解。。。。
[cpp] view plaincopy
而且!!!
如果上一句中末尾部分改成L"All Files(*.*)|*.*||" 也會出錯。搞毛。。。
原來的代碼巨簡單。。。
另一篇文件的解釋是:
問題的產生原因在
http://codeguru.earthweb.net/forum/printthread.php?t=320297&pp=50
有所解釋,我認為大體可以理解為:
VC6 自帶的SDK和 MFC42中的定義,再后來的SDK中更新了,從而導致在析構的時候多卸載了內容
此外還有一個沖突:
(1)CoInitializeEx(0, COINIT_MULTITHREADED); 會與CFileDialog沖突
會導致CFileDialog打開的對話框中“我的電腦”空白,無內容顯示。
解決:最后是兩者不要放在同一個線程中。也可以將CoInitialize(NULL)替換CoInitializeEx(0, COINIT_MULTITHREADED);
http://blog.csdn.net/harbinzju/article/details/6106597
再補上一個問題:
一次工作中,調用CFileDialog保存為一個Word文件,然后程序中套接字竟然不能連接了,查來查去,還以為是存Word格式自動化部分的問題,百思不得其解,最后終于定位到CFileDialog調用后,改變了工作目錄,導致套接字初始化通用ini配置文件路徑改變——傳遞進去默認ip地址!
最好使用GetCurrentDirectory和SetCurrentDirectory對當前工作目錄做一個保存與恢復!
http://blog.csdn.net/dijkstar/article/details/7199912總結
以上是生活随笔為你收集整理的CFileDialog 在使用sdk 后出现异常 Access violation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RtlAdjustPrivilege 一
- 下一篇: 直接载入内存中的DLL