[問題] VC2005 ShellExecute();

看板C_and_CPP (C/C++)作者時間16年前 (2009/06/16 17:29), 編輯推噓6(608)
留言14則, 5人參與, 最新討論串1/3 (看更多)
更新最新問題,在經過_T()之類的MARCO之後,轉型問題解決了, 但是還是有錯誤erro LNK2028,應該是甚麼連結錯誤吧 不過我發現,要是當初專案用 主控台程式建立 ,就不會有ERROR, DEV C++ 也可以空專案直接跑, 所以......還是卡關了. 作者: lytn (sapphira) 看板: C_and_CPP 標題: [問題] VC2005 ShellExecute(); 時間: Tue Jun 16 17:29:35 2009 我用 學校授權的 VS2005 ,應該是 .NET 架構吧 專案用 Windows From 開啟的 網路上找很多範例 例如 MSDN http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx 雖然是看不太懂,不過我照著寫,或是網路上範例碼直接COPY用 #include<windows.h> #include<shellapi.h> ShellExecute ( NULL, "open", "C:\\path\\to\\readme.txt", NULL, NULL, SW_SHOWNORMAL ); 編譯時都會 Error C2644:'ShellExecuteW':無法將參數2 從 'const char[5]' 轉換成 'LPCWSTR' 這要怎麼搞阿? ----原程式碼 #include "stdafx.h" #include <windows.h> #include <shellapi.h> #include<vector> #include "Form1.h" #include "GloVar.h" #include "CivilClass.h" #include "BasicExcel.hpp" using namespace YExcel; using namespace VC_Project; [STAThreadAttribute] int main(array<System::String ^> ^args) { // HWND hwnd; // LPCWSTR filpat="open"; WinExec("Notepad.exe", SW_SHOW); //這個會跑 ShellExecute ( NULL, "open", "C:\\path\\to\\readme.txt", NULL, NULL, SW_SHOWNORMAL ); //這會錯 Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // 建立主視窗並執行 Application::Run(gcnew Form1()); return 0; } 另外想順便問, WinExec 跟 ShellExecute 有什麼差別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.130.186

06/16 17:31, , 1F
改成_T("C:\\path\\to\\readme.txt"),MSDN generic-text
06/16 17:31, 1F

06/16 17:36, , 2F
#include <tchar.h>
06/16 17:36, 2F

06/16 17:36, , 3F
所有 string literal 都要用 _T() macro 包起來
06/16 17:36, 3F

06/16 17:40, , 4F
把 OPEN 跟 PATH 包起來以後 -> 兩個無法解析的外部符號
06/16 17:40, 4F
※ 編輯: lytn 來自: 140.113.130.186 (06/16 17:50)

06/16 19:45, , 5F
修正一下,你該用TEXT()才對,_T跟_TEXT還有_UNICODE都定義在
06/16 19:45, 5F

06/16 19:46, , 6F
tchar.h是微軟當初沒有給CRT有generic後來才加的。而Win API
06/16 19:46, 6F

06/16 19:46, , 7F
本來就generic所以用UNICODE跟TEXT(),只需要windows.h即可
06/16 19:46, 7F

06/16 20:32, , 8F
強制轉ASCII code→ShellExecuteA,或ShellExecuteW
06/16 20:32, 8F

06/16 20:35, , 9F
使用 UNICODE。一般用UNICODE可以支援各種語言
06/16 20:35, 9F

06/16 21:03, , 10F
可以試看看 ShellExecuteA 應該不會有這個問題
06/16 21:03, 10F
※ 編輯: lytn 來自: 140.113.130.186 (06/17 03:17)

06/17 08:52, , 11F
沒用過Windows Form只知道跟CLR有關。既然你這程式不是MFC,那
06/17 08:52, 11F

06/17 08:52, , 12F
在VC開專案時,選Win32 主控台專案也是合理吧
06/17 08:52, 12F

06/17 08:54, , 13F
開專案時選範本,應該是幫你設定好專案設定,也就是說,假設你
06/17 08:54, 13F

06/17 08:55, , 14F
開了主控台,也許專案設定手動改妥當,就算要編出MFC應該也能
06/17 08:55, 14F
感謝zlw 大指點很多, 後來我決定先改用 winexec(); 反正一時沒要求很多 這問題還是先懸在版上好徵求解答好了. 是說我就是想要視窗阿,前幾年摸mfc 書上那 doc-view 架構看到頭都好幾顆大. 後來有windows From 我超開心的. 只是現在是要接舊的程式,不想把舊的程式整併進來, 想直接去偷 console 程式跑出來的 output.txt. ※ 編輯: lytn 來自: 140.113.197.95 (06/17 09:48)
文章代碼(AID): #1ADsO01- (C_and_CPP)
文章代碼(AID): #1ADsO01- (C_and_CPP)