【问题标题】:Argument Passed is not complete in C++C++ 中传递的参数不完整
【发布时间】:2014-07-03 11:38:26
【问题描述】:

我只是想使用CreateProcess 将参数传递给另一个应用程序。 当我在目的地得到参数时,它不完整,只有一部分被传递。我得到的输出是"1\\Documentation\\U3DElements.pdf"

这是传递参数的代码。(这是一个 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:\Users\vignesh.d\Downloads\sdk110_v1_win\Adobe\Acrobat XI SDK\Version1\Documentation\U3DElements.pdf”

【问题讨论】:

    标签: c++ wpf vb.net window


    【解决方案1】:

    参数/参数以空格字符分隔。

    MsgBox(e.Args(1))
    

    会给你你论点的前半部分。

    如果你想传递包含空格的东西作为一个参数,你需要把它放在引号中,像这样:

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

    无论是否包含空格,都可以引用参数。

    【讨论】:

    • 我不确定我是否理解你的问题。但据我所知,空间没有转义序列。你为什么需要那个?
    • 发送路径时,如果路径有空格,则路径被分成两个参数。这就是我问的原因。现在这不是问题,我已经通过用明确的空间代码替换它来纠正它,我将其替换为 %20 并对其进行加密并在接收应用程序中对其进行解密以获得完整路径...
    • 正如我在答案中所说:您应该将论点“放在引号中”
    猜你喜欢
    • 2012-07-05
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多