я прочитал этот и добился открытия моего приложения на C #. Мое приложение C # открывает папку и рисует график. Могу ли я сообщить моему приложению C #, какую папку открывать из C ++, а затем, как только будет виден график и программа C # закрыта, она возвращается обратно в приложение C ++.
Редактировать: Спасибо Мэтью, я получил это работает.
Другой запрос относительно моей переменной CreateProcess lpCommandLine: (ниже приведен код)
CString sFolderPath = "C:\Documents and Settings\...";
int nStrBuffer = sFolderPath.GetLength() + 50;
LPTSTR szParam = _tcsdup(sFolderPath.GetBuffer(nStrBuffer));
nRet = ::CreateProcess(szCmdline,// pointer to name of executable module
szParam,// pointer to command line string
NULL,// pointer to process security attributes
NULL,// pointer to thread security attributes
FALSE,// handle inheritance flag
DETACHED_PROCESS,// creation flags
NULL,// pointer to new environment block
NULL,// pointer to current directory name
&sui,// pointer to STARTUPINFO
&pi );// pointer to PROCESS_INFORMATION
Я правильно получаю переменную szParam, но когда приложение открывается, полное имя файла не копируется. Например: в приведенном выше случае только «and Settings ….» копируется туда, где часть «C: \ Documents» осталась позади. Не могли бы вы указать на мою ошибку, пожалуйста?
Реализация C #:
[STAThread]
static void Main(string[] args)
{
foreach (string result in args)
{
MessageBox.Show(result);
}
}
Это конечно возможно.
C ++ CreateProcess()
имеет параметр с именем lpCommandLine
,
Что вам нужно сделать в C ++, это передать как lpCommandLine
строка с именем папки, которую вы хотите открыть. Вам нужно будет заключить строку в двойные кавычки, если путь к папке содержит пробелы.
Внутри вашей программы на C # у вас будет static void Main(string[] args)
, args
Параметр будет содержать имя папки, которое вы передали из программы C ++, чтобы вы могли действовать в соответствии с ним.
Чтобы программа C ++ ожидала завершения работы программы C #, ей необходимо использовать WaitForSingleObject()
ждать его завершения, используя дескриптор процесса, возвращенный из CreateProcess()
,
Это описано здесь: http://www.codeproject.com/Tips/333559/CreateProcess-and-wait-for-result
Других решений пока нет …