XP上的Win32调用引发异常
exception thrown from a Win32 call on XP
全部,
我有一台XP SP3机器,只有在家里运行、无线连接但没有域控制器或任何东西时,它才会使用我的软件崩溃。
我得到以下转储
Call stack below ---
# ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
00 0337ddc8 77e9f942 000006ba 00000001 00000000 kernel32!RaiseException+0x52
01 0337dde0 77e9fc30 000006ba 0337e1f4 0337e1d8 RPCRT4!RpcRaiseException+0x34
02 0337ddf0 77ef560b 0337de3c 0000004c 00217d40 RPCRT4!RpcRaiseException+0x322
03 0337e1d8 77de1ee8 77ddf4b0 77de14e4 0337e1f4 RPCRT4!NdrClientCall2+0x13b
04 0337e1ec 77de1e6a 00209878 0337e260 00000800 ADVAPI32!LsaOpenPolicy+0xc1
05 0337e240 77de5be7 0337e28c 0337e260 00000800 ADVAPI32!LsaOpenPolicy+0x43
06 0337e2a8 77de5b7a 015246d0 0337e930 0337e3f0 ADVAPI32!LookupAccountNameW+0x8e
07 0337e2d0 10006903 015246d0 0337e930 0337e3f0 ADVAPI32!LookupAccountNameW+0x21
我怀疑的代码是
char aTmp[MAX_PATH];
DWORD dwSize=sizeof(aTmp);
SID_NAME_USE aTmp2;
unsigned short usDmn[MAX_PATH];
DWORD dwDmn=sizeof(usDmn);
wchar_t* pDomain;
if (!rDomain.empty())
pDomain=(wchar_t*)rDomain.c_str();
else
pDomain=NULL;
if (!LookupAccountNameW(pDomain, (wchar_t*)rUser.c_str(), (PSID)aTmp,
&dwSize,
(LPWSTR)usDmn,
&dwDmn,
&aTmp2))
//Error
return aInfo;
用户和域是传入的字符串变量…
有什么明显我遗漏的吗?抛出了什么异常?enter code here
您投射的所有位置都可能是一个错误。你还没有向我们展示所有的定义,但你选角的事实本身就表明出了问题。您似乎正在将ANSI参数传递给Unicode函数。
为什么使用unsigned短字符而不是宽字符?
此外,您的SID看起来完全错误。
rUser
的类型是string
,而不是wstring
,假设您需要将(wchar_t*)
强制转换添加到对.c_str()
的调用中,以使编译器不会抱怨。
类似地,rDomain
也可以是8比特string
类型而不是16比特wstring
类型。
相关文章:
- C++/CLI System.AccessViolation在托管类中调用非托管函数时出现异常
- 尝试在 QT 项目中调用 Java 代码时未找到类异常
- 调用参数不是原子参数的函数是此代码引发异常的原因吗?
- 从 C# 调用 C++ DLib 会导致错误的分配异常
- 在 postOrderDelete 上调用析构函数时引发的异常
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- 为什么在析构函数中引发异常时不调用重载删除
- CPP 异常获取抛出调用方的详细信息
- 为什么要抛出引用调用复制构造函数的异常?
- 析构函数中的互斥锁C++在 Python 中调用 exit() 时会导致异常
- 调试"在抛出 ..) 实例后终止调用",当异常 _should_ 被捕获时
- 调用系统调用函数时出现异常
- 如果从在其他函数中调用的函数引发异常会发生什么情况
- C++函数中引发异常并在调用方中捕获它
- 防止线程在处理异常后在分离时调用 std::terminate()
- 如果从类成员初始值设定项引发的异常调用 std::terminate()
- 从 c# 内存不足异常调用 c++ 委托
- 析构函数的异常调用
- 加密++异常调用消息结束
- 避免对特定异常调用析构函数