#include <iostream> #include <Windows.h> #include <WinSock2.h> std::string GetLastErrorMessage() { DWORD errorCode = WSAGetLastError(); LPSTR errorMes ...
#include <iostream>
#include <Windows.h>
#include <WinSock2.h>
std::string GetLastErrorMessage() {
DWORD errorCode = WSAGetLastError();
LPSTR errorMessage = nullptr;
DWORD result = FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&errorMessage, 0, NULL);
if (result == 0) {
return "Failed to get error message";
}
std::string errorMessageStr(errorMessage);
LocalFree(errorMessage);
return errorMessageStr;
}
int main() {
// 在此進行Winsock初始化
// 進行網路操作,發生錯誤時獲取錯誤信息
int result = /* Your network operation */;
if (result == SOCKET_ERROR) {
std::string errorMessage = GetLastErrorMessage();
std::cout << "Error: " << errorMessage << std::endl;
}
// 清理Winsock資源
return 0;
}
在上述示例中,我們定義了一個GetLastErrorMessage()
函數,該函數使用FormatMessageA()
函數將錯誤代碼轉換為字元串信息。首先,我們調用WSAGetLastError()
獲取最後一次錯誤的錯誤代碼。然後,我們使用FormatMessageA()
函數來將錯誤代碼轉換為相應的錯誤消息字元串。
請註意,我們在FormatMessageA()
函數的dwFlags
參數中設置了一些標誌,包括FORMAT_MESSAGE_FROM_SYSTEM
表示從系統中獲取錯誤消息,FORMAT_MESSAGE_IGNORE_INSERTS
表示忽略任何插入參數。我們還使用了MAKELANGID()
巨集來確定錯誤消息的語言。
在應用程式的主體邏輯中,當發生網路操作錯誤時,我們可以調用GetLastErrorMessage()
函數來獲取錯誤消息,並相應地處理錯誤情況。
請註意,上述示例假設你已經初始化了Winsock併進行了必要的網路操作。確保在使用WSAGetLastError()
獲取錯誤代碼之前,你已經進行了相應的網路操作。