本帖最后由 Eaglecad 于 2024-9-13 17:44 编辑
[C++] 纯文本查看 复制代码 A.cpp,这块代码基本上大同小异,区别不大,都需要使用main的第一个参数 其代表参数个数及第二个指针数组参数,其代表多少个对应的参数
#include <iostream>
#include <cstring>
int main(int argc, char* argv[]) {
// 检查参数是否正确
if (argc == 2 && std::strcmp(argv[1], "xyz") == 0) {
std::cout << "Hello, World!" << std::endl;
}else{
return -1;
}
return 0;
}
B.cpp,主要需要关注创建进程的参数,第一个参数可传入EXE,第二个参数可传入它对应的参数
#include <windows.h>
#include <iostream>
int main() {
// A.exe的路径,可以根据实际情况修改,两个EXE不同目录,建议使用绝对路径
char szExe[] = "A.exe";//EXE
char szPara[] = "xyz";//参数
// 启动信息
STARTUPINFO si;
//进程信息
PROCESS_INFORMATION pi;
// 初始化
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 使用CreateProcess启动A.exe并传递参数,第一个参数为EXE路径,第二个参数为命令行参数,第三个参数为进程属性,第四个参数为线程属性,第五个参数为是否继承父进程句柄,第六个参数为创建标识,0为默认参数,可修改为CREATE_NEW_CONSOLE,以新终端显示输出,第七个是环境变量,第八个是工作路径,第九个是启动信息,第十个是进程信息
if (!CreateProcess(szExe, szPara, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
std::cerr << "CreateProcess failed, code : " << GetLastError() << std::endl;
return -1;
}
// 等待A.exe运行结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
分别编译两个程序,再使用B.exe调用A.exe即可。
当然,也可以把B.cpp的main参数解析下,使用命令行,输入B.exe xyz即可调用A.exe,输入其他则不调用
#include <windows.h>
#include <iostream>
int main(int argc, char* argv[]) {
// A.exe的路径,可以根据实际情况修改,两个EXE不同目录,建议使用绝对路径
char szExe[5] = "A.exe";//EXE
char szPara[256] = "xyz";//默认参数 可设置为空字符串,不是NULL
// 检查参数是否正确
if (argc >= 2) {
strncpy(szPara, argv[1],256);
}
// 启动信息
STARTUPINFO si;
//进程信息
PROCESS_INFORMATION pi;
// 初始化
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 使用CreateProcess启动A.exe并传递参数,第一个参数为EXE路径,第二个参数为命令行参数,第三个参数为进程属性,第四个参数为线程属性,第五个参数为是否继承父进程句柄,第六个参数为创建标识,0为默认参数,可修改为CREATE_NEW_CONSOLE,以新终端显示输出,第七个是环境变量,第八个是工作路径,第九个是启动信息,第十个是进程信息
if (!CreateProcess(szExe, szPara, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
std::cerr << "CreateProcess failed, code : " << GetLastError() << std::endl;
return -1;
}
// 等待A.exe运行结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
} |