SHFileOperation與AnsiString搭配使用的問題

之前利用SHFileOperation這個API寫了如下一段程式,是用來刪除資料夾(Directory)的.不管是空資料夾或資料夾底下有檔案或多個資料夾都能一次刪光非常好用.




測試的時候沒問題,但誰知程式一Release後,在一次偶然的操作中發現刪資料夾會出現錯誤訊息!Trace之後發現有的資料夾刪除時不會發生問題,有的卻會回傳1026的錯誤碼,Why??查了老半天發現Help裏pFrom的資料型別是LPCSTR,但BCB 6的Header檔裏卻是定義LPCWSTR.心想該不會是Access Memory時出問題了吧!?果不其然;把程式改成如下寫法後就正常了.




從本次的經驗中得出AnsiString的c_str()函式和Windows API搭配使用時,要特別注意會不會有Access Memory Error的狀況發生.比較保險的做法可以參考本例;配一個較大空間的記憶體再傳入API中,以免發生不可預期的錯誤.


沒有留言:

張貼留言