如何获取被调用程序返回的退出值并存储在内部?
How to get the returned exit value of an invoked program to store it internally?
此问题与之前找到的问题相关:
我可以在 runProgram()
函数中调用另一个可执行文件。但是,在此 runProgram()
函数之前 return 返回 main()
并关闭进程的句柄。我需要检索可执行文件 return 退出时的值...
这是我当前的申请:
#include <Windows.h>
#include <exception>
#include <stdio.h>
#include <tchar.h>
#include <cstdint>
#include <iostream>
uint32_t runProgram(LPCSTR lpApplicationName) {
STARTUPINFOA si;
PROCESS_INFORMATION pi;
// Set the size of the structures
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// Run the program
CreateProcessA(
lpApplicationName, // the path
NULL, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
CREATE_NEW_CONSOLE, // Opens file in seperate console
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure
);
uint32_t error = GetLastError();
if ( error != 0)
std::cerr << error << "\n";
// How to retrieve and store the result from the exiting program above...?
uint32_t cache_size = 0;
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return cache_size;
}
int main() {
try {
const uint32_t cache_size = runProgram("CacheQuerry.exe");
std::cout << cache_size << '\n';
}
catch (const std::exception& e) {
std::cerr << e.what() << "\n\n";
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
我想将此可执行文件中的 return 值存储到 runProgram()
的局部变量中:cache_size
.
这是调用程序中的 main.cpp:
#include "CacheQuerry.h"
int main() {
int error = cache_info();
if (error != 0)
std::cout << error << '\n';
else
std::cout << '\n';
std::cout << "l1d_cache_size = " << l1d_cache_size() << std::endl;
std::cout << "cache line size = " << cache_line_size() << '\n';
return l1d_cache_size();
}
被调用的程序将 return 程序退出时 l1d_cache_size()
产生的值。这是我要存储在 runProgram()
的 cache_size
变量中的值。程序退出后如何得到这个return值呢?在 "CacheQuerry.h"
中找到的函数调用的实现在这里应该无关紧要,但如果您需要查看它的实现,请不要犹豫,尽管询问。这是同一解决方案中的两个独立项目。在它自己的项目中的第一个 main.cpp 依赖于它自己项目中的第二个 main.cpp。
您可以通过调用 GetExitCodeProcess (pi.hProcess)
来获取它,在等待句柄之后但在关闭它之前。
您需要的确切代码是:
DWORD exit_code;
BOOL ok = GetExitCodeProcess (pi.hProcess, &exit_code);
奇怪 CreateProcess
的备注部分根本没有提到这一点。
此问题与之前找到的问题相关
我可以在 runProgram()
函数中调用另一个可执行文件。但是,在此 runProgram()
函数之前 return 返回 main()
并关闭进程的句柄。我需要检索可执行文件 return 退出时的值...
这是我当前的申请:
#include <Windows.h>
#include <exception>
#include <stdio.h>
#include <tchar.h>
#include <cstdint>
#include <iostream>
uint32_t runProgram(LPCSTR lpApplicationName) {
STARTUPINFOA si;
PROCESS_INFORMATION pi;
// Set the size of the structures
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// Run the program
CreateProcessA(
lpApplicationName, // the path
NULL, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
CREATE_NEW_CONSOLE, // Opens file in seperate console
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure
);
uint32_t error = GetLastError();
if ( error != 0)
std::cerr << error << "\n";
// How to retrieve and store the result from the exiting program above...?
uint32_t cache_size = 0;
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return cache_size;
}
int main() {
try {
const uint32_t cache_size = runProgram("CacheQuerry.exe");
std::cout << cache_size << '\n';
}
catch (const std::exception& e) {
std::cerr << e.what() << "\n\n";
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
我想将此可执行文件中的 return 值存储到 runProgram()
的局部变量中:cache_size
.
这是调用程序中的 main.cpp:
#include "CacheQuerry.h"
int main() {
int error = cache_info();
if (error != 0)
std::cout << error << '\n';
else
std::cout << '\n';
std::cout << "l1d_cache_size = " << l1d_cache_size() << std::endl;
std::cout << "cache line size = " << cache_line_size() << '\n';
return l1d_cache_size();
}
被调用的程序将 return 程序退出时 l1d_cache_size()
产生的值。这是我要存储在 runProgram()
的 cache_size
变量中的值。程序退出后如何得到这个return值呢?在 "CacheQuerry.h"
中找到的函数调用的实现在这里应该无关紧要,但如果您需要查看它的实现,请不要犹豫,尽管询问。这是同一解决方案中的两个独立项目。在它自己的项目中的第一个 main.cpp 依赖于它自己项目中的第二个 main.cpp。
您可以通过调用 GetExitCodeProcess (pi.hProcess)
来获取它,在等待句柄之后但在关闭它之前。
您需要的确切代码是:
DWORD exit_code;
BOOL ok = GetExitCodeProcess (pi.hProcess, &exit_code);
奇怪 CreateProcess
的备注部分根本没有提到这一点。