2014-07-03 64 views
2

我只是試圖使用CreateProcess將參數傳遞給另一個應用程序。 當我在目的地獲得參數時,它不完整隻有一部分被傳遞。我正的輸出是"1\\Documentation\\U3DElements.pdf"傳遞的參數在C++中不完整

這該傳遞參數的代碼。(這是一個C++代碼)

STARTUPINFO si;  
PROCESS_INFORMATION pi; 

// set the size of the structures 
ZeroMemory(&si, sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi, sizeof(pi)); 
LPTSTR cmdArgs = "C:\\Users\\vignesh.d\\Downloads\\sdk110_v1_win\\Adobe\\Acrobat XI SDK\\Version1\\Documentation\\U3DElements.pdf"; 
// start the program up 
if (CreateProcess(
     TEXT("C:\\Users\\vignesh.d\\Documents\\Visual Studio 2012\\Projects\\AdobePlugin\\AdobePlugin\\bin\\Debug\\AdobePlugin.exe"), 
     cmdArgs,NULL,NULL,FALSE, 
     CREATE_NEW_CONSOLE, 
     NULL, 
     NULL, 
     &si, 
     &pi)) 
{ 
    WaitForSingleObject(pi.hProcess, INFINITE); 
} 
CloseHandle(pi.hProcess); 
CloseHandle(pi.hThread); 

此代碼,其中我顯示它。(AdobePlugin.exe這是一個VB代碼)

Private Sub App_Startup(ByVal sender As Object, ByVal e As StartupEventArgs) 
    MsgBox(e.Args(2)) 
End Sub 

我想MSGBOX顯示的完整代碼「C:\用戶\ vignesh.d \下載\ sdk110_v1_win \的Adobe \ Acrobat中XI SDK \版本1 \文檔\ U3DElement s.pdf「

回答

3

參數/參數用空格分隔。

MsgBox(e.Args(1)) 

會給你你的論點的前半部分。

如果你想通過含有空格作爲一個參數的東西,你需要把它放在引號,喜歡這樣的:

LPTSTR cmdArgs = "\"C:\\Users\\vignesh.d\\Downloads\\sdk110_v1_win\\Adobe\\Acrobat XI SDK\\Version1\\Documentation\\U3DElements.pdf\""; 

它不能傷害報價參數是否包含空間與否。

+0

什麼是空間轉義序列... –

+0

我不知道我是否理解你的問題。但據我所知,沒有空間的逃生順序。你爲什麼需要這個? – dummy

+0

發送路徑時,如果路徑有空格,則路徑被分成兩個參數。這就是我問的原因。它不是一個問題,現在我已經通過替換一個明確的代碼來替換空格,並將其替換爲%20,並在接收應用程序中對其進行加密並將其解密,以獲取完整路徑... –