gpt4 book ai didi

c++ - 在 shellexecute 中将文件路径作为参数传递

转载 作者:行者123 更新时间:2023-11-30 04:20:20 25 4
gpt4 key购买 nike

我希望我的其他 C++ 程序从另一个文件运行,所以我使用 shell 执行。穆代码是:

#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 定义路径。任何帮助。

更具体的错误是:它给我以下行的错误:HINSTANCE ShellExecute(HWND, "open", szPath,"","",SW_SHOW);作为语法错误:“字符串”

当我给出这样的路径时:- C:\Users\saira\Documents\Visual Studio 2010\Projects\phase_1_solver\Debug\phase_1_solver.exe 它给出的错误如下:warning C4129: 's' : unrecognized character escape sequence警告 C4129:“D”:无法识别的字符转义序列

最佳答案

在你的代码中你有:

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 在 Why does ShellExecute return SE_ERR_ACCESSDENIED for nearly everything? 中讨论了 ShellExecute 的错误处理

关于c++ - 在 shellexecute 中将文件路径作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15342605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com