CFileDialogのフック関数解決ダイアログの複数選択のDomdal問題


先日上司から聞きましたが、CFileDialog類を使って、複数選択時に選択したファイルのバッファ領域を設定したら、どれぐらいのサイズが適切か分かりません。小さいドダムを設定したら、失敗に戻ります。CommDlgExtensdedErr関数でエラーコードを取得します。FNERR_です。BUFFERTOOSTMALL(つまり、バッファエリアが小さい)は、大きく設定してメモリを無駄にします。私たちは一回に何百の書類を選んでいますが、どれぐらいの大きさを設定すればいいのか分かりません。      私は私の考えを話しました。CFileDialogのデータメンバーm_。offには、ユーザが経路を変更するメッセージなどの関連メッセージをチェックして、現在のパスのファイルの個数を取得し、これを根拠にバッファサイズを設定するフック関数ポインタがある。リーダーは私の考えがよく分かりません。彼はインターネットで検索しました。一つの方法を見つけました。派生CFileDialog類の方法でやります。具体的には次の通りです。
     Multiple Selection in a File Dialog
    上のリンクで述べた方法は確実に実行可能です。しかし、私も私の方法が可能だと信じています。退勤後インターネットで検索したら、マイクロソフトの公式サイトにこの問題の解決方法があります。リンクは以下の通りです。
WindowsでFNERR_をどう処理しますか?BUFFERTOOSTMALL 
     このリンクが提供するコードはWin 32のプログラムに適しています。MFCのプログラムには適していません。Win 32のプログラムを作ってこの例のコードをテストしたところ、選択したファイルが多すぎると、割り当てが必要なバッファが多い場合、リンクの中のHeappAlloc関数を使ってエラーが発生します。エラーメッセージは以下の通りです。
 
     したがって、リンクに割り当てられたメモリとリリースされたメモリのHeappAllocとHeaphFree関数をそれぞれC++のnewとdeleteのオペレータに置き換えます。
      マイクロソフトの公式サイトで提供したやり方をもとに、MFCプログラムで使用する方法を模索しました。具体的なコードは以下の通りです。
    また、フック関数を使用する深刻な欠点は、プログラムはUnicode文字セットを用いてコンパイルしなければならず、マルチバイト文字セットコンパイルプログラムを使用して実行した後にFNERR_BUFFERTOOSTMALLのエラー(この点はすでにテストしましたが、この点でマイクロソフトがマルチバイトのプログラムをサポートしていない理由が分かりにくいです。)私のテスト環境はVS C++2005+sp 1、Win XP+sp 3、unicode文字セットです。