我正在使用Visual C++ 6.0。我不確定Visual Studio安裝的服務包級別,但操作系統是Win 2K SP4。失敗的代碼是DLL的一部分。VC++ 6.0:爲什麼CASyncSocket :: GetLastError()會導致訪問衝突?
下面的代碼:
EIO::OpenConnection()
{
m_Client = new CSocket();
if(m_Client->Create() == 0) {
delete m_Client;
m_Client = NULL;
return CAsyncSocket::GetLastError();
}
if (!m_Client->Connect((LPCTSTR)m_IPAddress, 7)) {
delete m_Client;
m_Client = NULL;
return CAsyncSocket::GetLastError();
}
...<stuff>...
}
此編譯沒有錯誤我的構建系統上,沒有任何的調用m_Client方法失敗的執行。當我將這個DLL移動到生產系統(Win 2K,尚不知道Service Pack級別)時,對m_Client-> Connect()的調用返回一個錯誤,所以它會進入IF塊。 CAsyncSocket :: GetLastError()然後調試器打開並報告0xC0000005訪問衝突。我不明白這個東西足以讓任何東西脫離反彙編。
我也嘗試過CSocket :: GetLastError()和m_Client-> GetLastError()以相同的結果。
我很確定m_Client-> Connect()失敗,因爲開發系統上缺少生產機器上的某些安全策略,但我想要獲取實際的錯誤代碼,以便我可以幫助IT人縮小了搜索範圍。
我還沒有嘗試在我的構建系統上強制調用GetLastError()以查看是否在那裏出現訪問衝突。
謝謝,這個伎倆。在提交原始問題後,我開始懷疑這可能是我在開會時的問題。 – Andrew 2010-01-12 17:34:01