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。 –