我对 GetLastError 和托管 C++ 有一个非常奇怪的问题。GetLastError 在从非托管代码转换到托管代码后返回一些非常奇怪的东西。
错误代码:122 - 传递给系统调用的数据区域太小。
此外,传入的 strMessage 正在发送到服务器。
非托管函数:
DWORD SendMessage(LPCTSTR strMessage, CString * strResponse)
{
DWORD dwLastError;
BOOL bSuccess = FALSE;
try
{
//some socket code
int ret = recv...
if (ret == SOCKET_ERROR || ret == 0)
{
Log(GetLastError()); //falls into here
Log(WSAGetLastError());
throw "Failed!"
}
bSuccess = TRUE;
}
catch (LPCTSTR pszException)
{
dwLastError = GetLastError();
Log(pszException);
Log(dwLastError );
Log(WSAGetLastError());
}
Log(dwLastError);
SetLastError(dwLastError);
return bSuccess;
}
托管代码:
void SendManagedMessage(String ^ strMessage)
{
CString cstrMessage = (char*) Marshal::StringToHGlobalAnsi(strMessage).ToPointer();
CString cstrResponse;
if (!SendMessage(cstrMessage, &cstrResponse))
{
Log("Failed to send managed message");
Log(GetLastError());
}
//...
}
日志输出
0
0
Failed!
Failed!
0
0
0
Failed to send managed message
122