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