2013-03-11 115 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

相关问题