【发布时间】:2017-12-21 11:26:20
【问题描述】:
在我的 Windows API 包装器 ATL dll 中,我已将 GetLastError 暴露给 COM 以进行 Windows API 错误处理。
实现如下:
STDMETHODIMP CWinAPI::WinAPI_GetLastError(int *Result) {
*Result = (int)GetLastError();
return S_OK;
}
当我从 VBScript 中使用它时:
Dim WINAPI: Set WINAPI = WScript.CreateObject("WinAPIWrapperLib.WINAPI")
WINAPI.WinAPI_ShellExecute NULL, "", "NonExistentFile.exe", "", "", 1
WScript.Echo CStr(WINAPI.WinAPI_GetLastError)
这一定会产生ERROR_FILE_NOT_FOUND 错误,但是当我通过 VBScript 从我的包装 dll 调用这个 windows API 函数时,它总是返回 ERROR_SUCCESS。
但是当我像这样在WinAPI_ShellExecute 的实现中添加以下行时:
DWORD ErrorMessageID = ::GetLastError();
wchar_t ErrorID[1024];
swprintf_s(ErrorID, 1024, L"%d", ErrorMessageID);
MessageBox(nullptr, (LPCWSTR)&ErrorID, L"GetLastError", MB_OK | MB_ICONERROR | MB_DEFBUTTON1);
它正确生成错误ERROR_FILE_NOT_FOUND。
我想知道GetLastError 出了什么问题。
提前致谢。
【问题讨论】:
标签: c++ dll vbscript getlasterror