Я бегу успешно:
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);
но не удалось. Это возможно?
РЕДАКТИРОВАТЬ:
Я думаю, что вам на самом деле нужно пристраститься к 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, вам нужно либо маршалировать туда-сюда, либо использовать правильный тип данных с самого начала для того, как вы хотите его использовать.
Process::Start
ожидает String^
и вы пытаетесь передать его std::string
, У него нет вариадрической версии, и он не знает, что такое std::string
является. Чтобы передать значение из std::string
Вы должны сделать это:
std::string str("Some Path");
Process::Start(marshal_as<String^>(str));