掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
添付ファイルをメールから取り外すには? (ID:56410)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
今まで開発をとめていたメールソフト(nMail.dllを使用)の 開発を再開して、止まっていた保存したメールから添付ファイルを 取り外す部分の作成に取り掛かったのですが、コンパイルとかは警告も出さずに 成功するのにもかかわらず、実行してみると不正な処理で落ちてしまいます。 いろいろ試してみたですが、状態が改善できませんでした。 どうすれば良いか教えてください。 関数はすべてnMail.dllのヘルプの関数を使用しています。 ソースはhttp://angelteatime.punyu.net/knot/mview.htmlに置いてあります。 該当する場所は以下の場所です。 // 添付ファイルを展開して保存ダイアログ LRESULT CALLBACK AttachFileProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND hList, hFDEdit, hFBtn, hFDBtn; BROWSEINFO bi; ITEMIDLIST *lpid; HRESULT hr; LPMALLOC pMalloc = NULL; // IMallocへのポインタ BOOL bDir = FALSE; HANDLE hFile; // ファイルハンドル HGLOBAL hMem; // グローバルハンドル DWORD dwFSizeHigh, dwFSize, dwAccBytes; // バイト数 char *lpszBuf; // ファイルバッファ char *f_id, *PertId; // 分割メールのID int no; // 添付ファイルの個数 int ret; // 戻り値 // 添付メール展開用変数 char subject[TEMP_MAX], date[TEMP_MAX], from[TEMP_MAX], header[TEMP_MAX]; char FileName[TEMP_MAX], Temp[NMAIL_ATTACHMENT_TEMP_SIZE]; switch(msg){ case WM_INITDIALOG: CenterWindow(hDlg, hParent); hList = GetDlgItem(hDlg, IDC_LIST1); hFDEdit = GetDlgItem(hDlg, IDC_EDIT1); hFDBtn = GetDlgItem(hDlg, IDC_FILEBTN); hFBtn = GetDlgItem(hDlg, IDC_BUTTON1); return TRUE; case WM_COMMAND: switch(LOWORD(wParam)){ case IDC_BUTTON1: MessageBox(hDlg, "添付ファイルの展開は実装されていません", "Mail Viewer", MB_OK | MB_ICONINFORMATION); AttachFileOpen(hDlg, szAtFile, szAtFileName); // ファイルを開く hFile = CreateFile(szAtFile, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE){ MessageBox(hDlg, "ファイルをオープンできません", "Error", MB_OK); return FALSE; } // ファイルサイズを調べる dwFSize = GetFileSize(hFile, &dwFSizeHigh); if(dwFSizeHigh != 0){ MessageBox(hDlg, "ファイルが大きすぎます", "Error", MB_OK); CloseHandle(hFile); return FALSE; } // ファイルを読み込むためのメモリ領域を確保 hMem = GlobalAlloc(GHND, dwFSize + 1); if(hMem == NULL){ MessageBox(hDlg, "メモリを確保できません", "Error", MB_OK); CloseHandle(hFile); return FALSE; } // メモリ領域をロックしてファイルを読み込む lpszBuf = (char *)GlobalLock(hMem); ReadFile(hFile, lpszBuf, dwFSize, &dwAccBytes, NULL); lpszBuf[dwFSize] = '\0'; // メールファイルの中身をコピーする strcpy((char *)szAtFileData, lpszBuf); // ファイルを閉じる CloseHandle(hFile); GlobalUnlock(hMem); GlobalFree(hMem); // ファイルが添付されているかを確認する if((no = NMailAttachmentFileStatus(szAtFileData, f_id, TEMP_MAX)) != NMAIL_NO_ATTACHMENT_FILE){ // 添付ファイルが存在するのでリストボックスにファイル名を出力する // MessageBox(hDlg, "添付ファイルがありました!!", "添付ファイルあり", MB_OK |MB_ICONINFORMATION); if(no == 1){ PertId = f_id; } hList = GetDlgItem(hDlg, IDC_LIST1); if(no == 0 || PertId == f_id){ SendMessage(hList, LB_INSERTSTRING, (WPARAM)0, (LPARAM)szAtFile); SendMessage(hList, LB_SETCURSEL, (WPARAM)0, 0L); EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); } } else{ // 添付ファイルがないのでメッセージを出して終了 MessageBox(hDlg, "このメールに、添付ファイルはありません", "添付ファイルなし", MB_OK |MB_ICONINFORMATION); } return TRUE; case IDC_FILEBTN: MessageBox(hDlg, "添付ファイルの展開は実装されていません", "Mail Viewer", MB_OK | MB_ICONINFORMATION); memset(&bi, 0, sizeof(BROWSEINFO)); bi.hwndOwner = hDlg; bi.lpfn = SHMyProc; bi.ulFlags = BIF_EDITBOX | BIF_STATUSTEXT | BIF_VALIDATE; bi.lpszTitle = "展開先ディレクトリ指定"; lpid = SHBrowseForFolder(&bi); if(lpid == NULL){ return FALSE; } else{ hr = SHGetMalloc(&pMalloc); if(hr == E_FAIL){ MessageBox(hDlg, "SHGetMalloc Error", "Error", MB_OK); return FALSE; } SHGetPathFromIDList(lpid, szDir); if(szDir[strlen(szDir) - 1] != '\\'){ strcat(szDir, "\\"); } // うまくいかないのでエディットハンドル再取得 hFDEdit = GetDlgItem(hDlg, IDC_EDIT1); // 展開先フォルダをセットする SetWindowText(hFDEdit, szDir); pMalloc->Free(lpid); pMalloc->Release(); bDir = TRUE; } return TRUE; case IDOK: // 添付ファイルの展開 ret = NMailAttachmentFileFirst(Temp, subject, date, from, header, body, szDir, FileName, szAtFileData, NULL); if(ret == NMAIL_SUCCESS){ NMailAttachmentFileClose(Temp); wsprintf(strMsg, "%sに%sを展開しました。", szDir, FileName); MessageBox(hDlg, strMsg, "Mail Viewer", MB_OK | MB_ICONINFORMATION); } EndDialog(hDlg, IDOK); return TRUE; case IDCANCEL: EndDialog(hDlg, IDOK); return TRUE; default: return FALSE; } default: return FALSE; } return TRUE; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.