[問題] 視窗程設 啟動檔案問題

看板C_and_CPP (C/C++)作者 (夜楓)時間14年前 (2011/07/19 13:20), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Visual C++2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 使用VC2010建置一個Windows應用程式模組後(有基本視窗功能) 增加工具列"瀏覽"選項 使用瀏覽啟動一個EXE執行檔 但是無法讀檔成功 另外要問的是 如何在瀏覽選擇檔案後 就讓他直接執行這個exe檔? *[36m預期的正確結果(Expected Output):*[m 在工具列瀏覽後 選擇要執行的exe檔 點選後自動執行所選擇的檔案 程式碼(Code):(請善用置底文網頁, 記得排版) 以下是我點選"瀏覽"後所呼叫的function 有兩個 但只呼叫 第二個"DoFileOpen" 在這裏面會呼叫第一個"LoadFile" http://codepad.org/K7BKoJbD bool LoadFile(HWND hEdit, LPSTR pszFileName) { HANDLE hFile; bool bSuccess = false; hFile = CreateFile( (LPCWSTR)pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwFileSize; dwFileSize = GetFileSize(hFile, NULL); if(dwFileSize != 0xFFFFFFFF) { LPSTR pszFileText; pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1); if(pszFileText != NULL) { DWORD dwRead; if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL)) { pszFileText[dwFileSize] = 0; // Null terminator } GlobalFree(pszFileText); } } CloseHandle(hFile); } return bSuccess; } bool DoFileOpen(HWND hwnd) { OPENFILENAME ofn; char szFileName[MAX_PATH]; ZeroMemory(&ofn, sizeof(ofn)); szFileName[0] = 0; ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFilter = TEXT("EXE (*.exe)\0*.exe\0"); ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.lpstrDefExt = TEXT("EXE"); ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if(GetOpenFileName(&ofn)) { if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), (LPSTR)szFileName)) { MessageBox(hwnd, TEXT("讀檔失敗"), TEXT("Error"), MB_OK | MB_ICONEXCLAMATION); return FALSE; } } return TRUE; } 補充說明(Supplement): 在瀏覽選擇後 卻會跳到讀檔失敗的function 不太確定LoadFile的使用有沒有錯誤 麻煩版上高手解答了 謝謝! -- 要感謝的東西太多了  那就謝天吧     要改的程式太多了  那就改天吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.16.178 ※ 編輯: ym410804 來自: 220.136.16.178 (07/19 13:28) ※ 編輯: ym410804 來自: 220.136.16.178 (07/19 13:29)

07/19 16:32, , 1F
(LPCWSTR)pszFileName ←我記得不能直接這樣轉換
07/19 16:32, 1F

07/19 22:56, , 2F
小弟還以為FileDialog選定file後, 應該是拿到檔名以後,
07/19 22:56, 2F

07/19 22:56, , 3F
用CreateProcess之類的API launch它來執行說@_@"
07/19 22:56, 3F

07/19 23:39, , 4F
哦...找到bug了 原來我bsuccess的值一值都沒改= ="
07/19 23:39, 4F

07/19 23:39, , 5F
l大...我這樣強制轉換不會有問題耶XD
07/19 23:39, 5F

07/19 23:40, , 6F
不過一定有更好的寫法 我知道這樣轉不太好...
07/19 23:40, 6F
文章代碼(AID): #1E9HGhes (C_and_CPP)
文章代碼(AID): #1E9HGhes (C_and_CPP)