【发布时间】:2014-08-14 06:12:01
【问题描述】:
我有一个 Vc++ 代码、一个 A.EXE 项目 (MBCS) 和一个静态库项目 (Unicode)。静态库 (*.lib) 项目具有如下代码,它尝试从其中启动不同的 exe(例如 pwrtest.exe)。但是当执行 CReateProcess() 语句时,代码会崩溃。
错误是“A.EXE”中 (ntdll.dll) 处的未处理接收: ::Access Vioaltion读取位置0xCCCCCCCC
我确保 appPath 和 workdir 中的值是正确的。 它们是这样的值:: c:\Users\abcd\xyz\somedirectory\abc 等... 目录名称用双斜杠“\”分隔。
我真的不明白这是什么问题。
我还添加了一个 try catch 语句,但是当我在 CreateProcess() 行上进入代码 (F10) 时,它会立即崩溃并抛出上述异常。 所以它甚至没有来 catch 声明。
由于 Create process() 是一个 C API 和 C 类型总是容易出现内存 elaks 等,只是想知道是否有一个 C++ STD:: 库对应物(一些容器函数 API),它更简单但是做 CreateProcess() C API 的工作。
PROCESS_INFORMATION pI;
STARTUPINFO sI;
LPTSTR appPath;
LPTSTR workDir;
wchar_t cwd[_MAX_PATH];
GetCurrentDirectory(_MAX_PATH, cwd);
wchar_t TestEXEPath[_MAX_PATH];
wcscpy(TestEXEPath, cwd);
wcscat(TestEXEPath, L"\\somedircetory\\abc\\pwrtest.exe /sleep /c:1");
appPath = TestEXEPath;
wchar_t workDirForTestEXE[_MAX_PATH];
wcscpy(workDirForTestEXE, cwd);
wcscat(workDirForTestEXE, L"\\somedirectory\\abc");
workDir = workDirForTestEXE;
try
{
if (!CreateProcess(NULL, appPath, NULL, NULL, FALSE, 0, NULL, workDir, &sI, &pI))
{
......
}
{
......
}
}
catch (exception& exType)
{
std::cout << "ExType is" << exType.what() << endl;
}
【问题讨论】:
标签: c++ exception visual-c++ exception-handling createprocess