Передача строки в Process :: Start

Я бегу успешно:

Process::Start("C:\\Users\\Demetres\\Desktop\\JoypadCodesApplication.exe");

из приложения Windows Forms (Visual C ++) и, как и ожидалось, я получил 2 программы, запущенные одновременно. Мои вопросы:

Могу ли я передать строку, обозначающую имя файла, Process::Start метод? Я старался:

std::string str="C:\\Users\\Demetres\\Desktop\\JoypadCodesApplication.exe";
Process::Start("%s", str);

но не удалось. Это возможно?

РЕДАКТИРОВАТЬ:
введите описание изображения здесь

1

Решение

Я думаю, что вам на самом деле нужно пристраститься к System::String^ для передачи аргумента.
Вы можете даже назначить прямо из std::string к System::String^,

///marshal_as<type>(to_marshal)
///marshal_context ctx; ctx.marshal_as<const char *>(to_marshal)
#include <msclr/marshal.h>
#include <msclr/marshal_cppstd.h>
#include <msclr/marshal_atl.h>
using namespace msclr::interop;
using namespace System::Runtime::InteropServices;

Process::Start(marshal_as<String^>(str));

Но в этом случае вы можете просто использовать String^ вместо:

String^ str = L"path to file";
Process::Start(str);

Когда вы работаете с C ++ / CLI, вам нужно либо маршалировать туда-сюда, либо использовать правильный тип данных с самого начала для того, как вы хотите его использовать.

MSDN: обзор маршалинга в C ++

1

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

Process::Start ожидает String^ и вы пытаетесь передать его std::string, У него нет вариадрической версии, и он не знает, что такое std::string является. Чтобы передать значение из std::stringВы должны сделать это:

std::string str("Some Path");
Process::Start(marshal_as<String^>(str));
1

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