關於部落格
  • 127036

    累積人氣

  • 30

    今日人氣

    0

    追蹤人氣

CFileDialog Assertion Failed

 
     神奇的是 win7 沒有這個問題, 可是客戶的電腦是XP. 而且 Save 指令沒有問題, SaveAs 卻出事. 經過一個下午的研究中於找出問題出在哪裡. 這個存檔的程式碼中調用了 MFC 的 CFileDialog 並調用了

CFileDialog::GetFileExt()
CFileDialog::GetPathName()
CFileDialog::GetFloderPath()


我這裡主要死在

GetFloderPath()

這裡, 因為拿掉這個就不會出現那個錯誤. 雖然微軟 msdn 有註明:

必須建立對話方塊。 OFN_EXPLORER 樣式;否則,方法會失敗並發生判斷提示。

只有在對話方塊顯示時,您可以呼叫這個方法。 在對話方塊關閉之後,這個函式將不再,然後,方法會失敗並發生判斷提示。

可是加入了

OFN_EXPLORER 

參數並沒有影響, 而且這些 CString 的調用都是在 DoModual 之後...也就是"對話方塊結束後". 那這個函數基本上就沒什麼意義了( 雖然 win7 不會有這種問題 ). 不過 mfc 還真怪, 因為有些人連

GetFileName()

也會掛... 網頁 Link. 感覺 visual studio 裡面放了一堆未爆彈, 只有你真的去踏到那個地雷的時候才會發現. (尤其是交貨的時候=口+). 下面寫了一個函數提供給相同的受害著們...其實也只是從原來的 string 去切而已

CString GetFloderPath(CString pathName)
{
int nPos = pathName.ReverseFind(L'\'); //非寬字元 wchar_t 的專案記得拿掉 L
return pathName.Right(pathName.GetLength()-nPos-1);
}

將帶進去的 pathName 切出 FloderPath 的那一段. 
 
   
See also:
*. sort() 排序
*. rand()函數的應用
*. Note of class(20.1-20.6)
*. 如何在 Visual C++ 中建立一個可執行 cpp 檔案(Visual stduio 2010)
*. Windows Forms 與 DirectShow
*. General Error C101008d 與防毒軟體迷思
 
 

相簿設定
標籤設定
相簿狀態