GetOpenFileNameがCDERR_INITIALIZATIONで落ちる

[戻る]
みずき [E-Mail] 2002/03/28(木) 17:29:43
GetOpenFileNameを用いてファイル名称を取得しようとしているのですが、
ダイアログが表示されません。
CommDlgExtendedErrorの結果はCDERR_INITIALIZATION(0x0002)
ということで下記HPをみて修正をしましたが、相変わらずCDERR_INITIALIZATION
で終了してしまいます。
参考HP
 http://www.microsoft.com/JAPAN/support/kb/articles/JP222/0/03.asp

環境はwindows2000
   VC++6.0にてコーディングしています。

*****ソース****************

    OPENFILENAME  ofn
    unsigned char szSendFile[256]
    unsigned char ucMessage[256];
    unsigned char ucMName[40];   
    int           nRtn;
    BOOL          blget = FALSE;

    strcpy(ucMName,"DlgInFile");                           /* 関数名設定      */

    memset(&ofn,0x00,sizeof(OPENFILENAME));

    ofn.lStructSize = sizeof(OPENFILENAME);                /* ファイル構造体サイズ */
    ofn.hwndOwner = NULL;  
    ofn.lpstrFile = szSendFile;                            /* 選択ファイル名格納 */
    ofn.nMaxFile = sizeof(szSendFile);                     /* ファイル名サイズ     */
    ofn.lpstrFilter = "テキスト(*.txt)\0*.txt\0すべて(*.*)\0*.*\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrTitle = "CSVファイル選択";                 /* タイトル           */
    ofn.lpstrInitialDir = NULL;
    ofn.lpstrCustomFilter = NULL;
    ofn.nMaxCustFilter = 0;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.nFileOffset = 0;
    ofn.nFileExtension = 0;
    ofn.lpstrDefExt = NULL;
    ofn.lCustData = 0;
    ofn.lpfnHook = 0;
    ofn.lpTemplateName = 0;
      

    SetDlgItemText(hwnd,IDC_INFILENAME,ofn.lpstrTitle);
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
    /* 既存パス指定・既存ファイル指定・読出しチェックボックスなし */
    blget = GetOpenFileName(&ofn);

    if(blget)
    {
        /* 指定ダイアログ名称をリストボックスに表示 */
        if(cIOFlg == DLG_IN)
        {
            SetDlgItemText(hwnd,IDC_INFILENAME,ofn.lpstrFileTitle);
        } else 
        if(cIOFlg == DLG_OUT){
            SetDlgItemText(hwnd,IDC_OUTFILENAME,ofn.lpstrFileTitle);
        }
        
        nRtn = 0;
    } else {
        /* 障害メッセージの取得 */
        /* CommDlgExtendedErrorの詳細番号はCDERR.Hを参照*/
        sprintf(ucMessage,ODA200_MSG,ucMName,CommDlgExtendedError());
        SendDlgItemMessage(hwnd, IDC_INFO, LB_ADDSTRING,
                           0, (LPARAM)ucMessage);

        nRtn = 1;
     }

    return nRtn;

みずき 2002/03/28(木) 17:37:59
[[解決]]
さきほど質問の投稿をしましたが、重大な見落としをしていました。
それを解決した結果、ファイル選択画面がでるようになりました。

対策ですが、以下の2行を追加しました。
よく確認をせずに投稿をしてしまい、大変申しわけありませんでした。m(_ _)m

************* ソース **************
 strcpy(ucMName,"DlgInFile");                           /* 関数名設定      */

    memset(&ofn,0x00,sizeof(OPENFILENAME));
/* S 追加 */
    memset(szSendFile,0x20,sizeof(szSendFile));
    szSendFile[0] = '\0';
/* E 追加 */

    ofn.lStructSize = sizeof(OPENFILENAME);                /* ファイル構造体サイズ */
    ofn.hwndOwner = NULL;  
    ofn.lpstrFile = szSendFile;                            /* 選択ファイル名格納 */
    ofn.nMaxFile = sizeof(szSendFile);                     /* ファイル名サイズ   
以下同文

古いスレッドには追加発言できません。