অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে:
FormatMessage
DWORD
একটি HRESULT
(সাধারণত GetLastError()
) নয় ফলাফল গ্রহণ করে ।
LocalFree
বরাদ্দ করা মেমরি মুক্তি প্রয়োজন FormatMessage
আমি উপরোক্ত বিষয়গুলি নিয়েছি এবং আমার উত্তরের জন্য আরও কয়েকটি যুক্ত করেছি:
FormatMessage
প্রয়োজনীয় হিসাবে মেমরি বরাদ্দ এবং প্রকাশ করতে একটি শ্রেণীর মধ্যে মোড়ানো rap
- অপারেটর ওভারলোড ব্যবহার করুন (যেমন
operator LPTSTR() const { return ...; }
আপনার ক্লাসটি স্ট্রিং হিসাবে ব্যবহৃত হতে পারে
class CFormatMessage
{
public:
CFormatMessage(DWORD dwMessageId,
DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)) :
m_text(NULL)
{
Assign(dwMessageId, dwLanguageId);
}
~CFormatMessage()
{
Clear();
}
void Clear()
{
if (m_text)
{
LocalFree(m_text);
m_text = NULL;
}
}
void Assign(DWORD dwMessageId,
DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
{
Clear();
DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_IGNORE_INSERTS,
FormatMessage(
dwFlags,
NULL,
dwMessageId,
dwLanguageId,
(LPTSTR) &m_text,
0,
NULL);
}
LPTSTR text() const { return m_text; }
operator LPTSTR() const { return text(); }
protected:
LPTSTR m_text;
};
উপরের কোডটির আরও একটি সম্পূর্ণ সংস্করণ এখানে পান: https://github.com/stephenquan/ FormatMessage
উপরের শ্রেণীর সাথে, ব্যবহারটি সহজভাবে:
std::wcout << (LPTSTR) CFormatMessage(GetLastError()) << L"\n";