2013-03-11 117 views
1

我想讓我的其他C++程序從另一個文件運行,所以我使用的是shell執行。穆代碼:在shellexecute中傳遞文件路徑作爲參數

#pragma comment(lib,"shell32.lib") 
#include "windows.h" 
#include<Shellapi.h> 

#include<stdio.h> 
#include<iostream> 
using namespace std; 

class spwan{ 
public: 
    //char szPath[] = ""; 
    void run(char path[]); 
}; 

void spwan::run(char szPath[]){ 
HINSTANCE ShellExecute(HWND, "open", szPath,"","",SW_SHOW);  
    cout<<"program executed"; 
} 

int main() 
{ 
spwan s; 
s.run("path to the file"); 
} 

,但我有一樣的問題有望類型說明符與「開放」,我不能夠確定使用szPath的路徑。 Anyhelp。如果你有任何問題,請聯繫我們,我們會盡快爲你解答。作爲語法錯誤:'string'

當我給這樣的路徑: - C:\ Users \ saira \ Documents \ Visual Studio 2010 \ Projects \ phase_1_solver \ Debug \ phase_1_solver.exe它給出錯誤,如:警告C4129: 「S」:無法識別的字符轉義序列警告C4129:「d」:無法識別的字符轉義序列

+0

請告訴我們什麼是錯的。編譯器錯誤?運行時失敗?並提供確切的信息。此外,它拼寫'spawn'。無需在此處傳遞窗口句柄。通過'0'。也不需要傳遞動詞,通過'NULL'。其他兩個參數也通過'NULL'而不是''「'。 – 2013-03-11 15:38:55

+0

這真的歸結爲如何正確調用一個函數,如果你不能這樣做,我強烈建議不要進入Windows API。 – chris 2013-03-11 15:39:11

+0

我想知道的主要事情是如何使用路徑作爲參數。 – networks 2013-03-11 15:42:07

回答

2

在你的代碼有:

HINSTANCE ShellExecute(HWND, "open", szPath,"","",SW_SHOW); 

這是一個函數的聲明。我推測你實際上打算調用這個函數:

HINSTANCE retval = ShellExecute(HWND, "open", szPath,"","",SW_SHOW); 

現在,那也不會編譯。由於HWND是一種類型。我認爲你需要:

HINSTANCE retval = ShellExecute(0, "open", szPath, NULL, NULL, SW_SHOW); 

更重要的是,沒有必要真正指定一個動詞。路徑的默認動詞就足夠了。

HINSTANCE retval = ShellExecute(0, NULL, szPath, NULL, NULL, SW_SHOW); 

它聽起來好像你正在傳遞的字符串是這樣的:

s.run("C:\Users\saira\...\phase_1_solver.exe"); 

因爲反斜槓作爲C++中的轉義字符並不好。所以,你需要逃避它:

s.run("C:\\Users\\saira\\...\\phase_1_solver.exe"); 

如果你不打算測試返回值,那麼你可以簡單的寫:

ShellExecute(0, NULL, szPath, NULL, NULL, SW_SHOW); 

如果你想從ShellExecute檢查錯誤的回報,那麼ShellExecute是一個不好的函數來調用。它的錯誤處理特別薄弱。改爲使用ShellExecuteEx。 Raymond Chen討論ShellExecute的錯誤處理Why does ShellExecute return SE_ERR_ACCESSDENIED for nearly everything?

+0

我該如何處理轉義字符序列警告 – networks 2013-03-11 15:57:00

+0

最新更新涵蓋了 – 2013-03-11 15:57:44

+0

這是什麼現在我的意思是我知道有類型不匹配但是我需要爲此做什麼樣的投射。錯誤C2664:'ShellExecuteW':無法將參數2從'const char [5]'轉換爲'LPCWSTR' 1>指向的類型不相關;轉換需要reinterpret_cast,C風格轉換或函數風格轉換 – networks 2013-03-11 16:00:22

相關問題