GetLastError和托管C++有一个非常奇怪的问题。从非托管代码转换为托管代码后,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
发布调用'recv()'的代码。 –
您的非托管代码中存在一个错误 - 使用单位变量dwLastError。 –