передача пути к файлу в качестве аргумента в shellexecute

я хочу, чтобы моя другая программа на C ++ запускалась из другого файла, поэтому я использую shell execute. Му код:

#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, он дает ошибки, такие как: предупреждение C4129: ‘s’: предупреждение о нераспознанной символьной последовательности C4129: ‘D’: escape-последовательность нераспознанного символа

1

Решение

В вашем коде у вас есть:

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 ++ как escape-символ. Так что вам нужно избежать этого:

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

Если вы не собираетесь проверять возвращаемое значение, вы можете просто написать:

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

Если вы хотите проверить на наличие ошибок по возвращении из ShellExecute, затем ShellExecute плохая функция для вызова. Его обработка ошибок особенно слаба. использование ShellExecuteEx вместо. Раймонд Чен обсуждает обработку ошибок ShellExecute в Почему ShellExecute возвращает SE_ERR_ACCESSDENIED почти для всего?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]