J'ai un problème vraiment étrange avec GetLastError et géré C++. GetLastError renvoie quelque chose de très étrange après la transition du code non géré au code managé.Retour étrange GetLastError dans C++ géré
Le code d'erreur: 122 - La zone de données transmise à un appel système est trop petite.
En outre, le message strMessage transmis au serveur.
fonction non managée:
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;
}
code managé:
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());
}
//...
}
sortie du journal
0
0
Failed!
Failed!
0
0
0
Failed to send managed message
122
Postez le code qui appelle 'recv()'. –
Vous avez un bug dans votre code non géré - en utilisant la variable unitialized dwLastError. –