[Win32 C++] Exception Handling Implementation using Win32 in C++

tom_mai78101

The Helper Connoisseur / Ex-MineCraft Host
Staff member
Reaction score
1,259
Here's a simple way of implementing exception handling using Win32 in C++. Note that when using Win32, the API uses UTF-16, not UTF-8, for its Unicode interface. This is mainly because of historical reasons.

Therefore, in order to work with this, you need to use wide strings in C++.

I also added OutputDebugStringA to emphasize that it outputs ANSI strings, and also to output it to the debugger's output window/view.

Code:
#include <Windows.h>
#include <string>
#include <sstream>
#include <exception>
#include <comdef.h>

class Foo : public std::runtime_error {
public:
    std::wstring errorMessageW;
    std::string errorMessageA;

    Foo(HRESULT result, const char* funcName) : std::runtime_error("Unexpected error") {
        std::wstringstream functionName;
        functionName << funcName;
        _com_error error(result);
        std::wstring message = error.ErrorMessage();
        this->errorMessageW = std::wstring(functionName.str() + L" has failed with error message: " + message + L"\n");
        this->errorMessageA = std::string(this->errorMessageW.begin(), this->errorMessageW.end());
    }

    const char* what() const throw() override {
        return this->errorMessageA.c_str();
    }
};


int WINAPI WinMain(HINSTANCE h, HINSTANCE nu, LPSTR s, int c) {
    HRESULT result = S_OK;
    try {
        throw Foo(result, __func__);
    }
    catch (Foo e) {
        MessageBox(nullptr, e.errorMessageW.c_str(), L"Error", MB_OK);
        OutputDebugStringA(e.what());
    }
    return 0;
}
Output message is given below:

Code:
WinMain has failed with error message: The operation completed successfully.
 
Last edited:
General chit-chat
Help Users
  • No one is chatting at the moment.
  • jonas jonas:
    Good to see you Varine!
  • The Helper The Helper:
    Happy Sunday!
    +1
  • V-SNES V-SNES:
    Happy Sunday!
    +1
  • ToshibaNuon ToshibaNuon:
    Happy sunday!
    +2
  • The Helper The Helper:
    And its Friday!
  • The Helper The Helper:
    Happy Saturday!
    +1
  • V-SNES V-SNES:
    Happy Saturday!
  • The Helper The Helper:
    Happy Monday!
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    Happy Friday!
    +1
  • tom_mai78101 tom_mai78101:
    Starting this upcoming Thursday, I will be in Japan for 10 days.
  • tom_mai78101 tom_mai78101:
    Thursday - Friday will be my Japan arrival flight. 9 days later, on a Sunday, will be my return departure flight.
    +2
  • The Helper The Helper:
    Hope you have safe travels my friend!
    +1
  • vypur85 vypur85:
    Wow spring time in Japan is awesome. Enjoy!
  • The Helper The Helper:
    Hopefully it will be more pleasure than work
  • vypur85 vypur85:
    Recently tried out ChatGPT about WE triggering. Wow it's capable of giving a somewhat legitimate response.
  • The Helper The Helper:
    I am sure it has read all the info on the forums here
  • The Helper The Helper:
    i think triggering is just scripting and chatgpt is real good at code
  • vypur85 vypur85:
    Yeah I suppose so. It's interesting how it can explain in so much detail.
  • vypur85 vypur85:
    But yet it won't work.
  • The Helper The Helper:
    it does a bad ass job doing excel vba code it has leveled me up at my job when I deal with excel that is for sure
  • vypur85 vypur85:
    Nice! I love Excel coding as well. Has always been using Google to help me. Maybe I'll use ChatGPT next time when I need it.
  • The Helper The Helper:
    yeah whatever it puts out even if it is not perfect I can fix it and the latest version of chatgpt can create websites from pictures it will not be long until it can do that with almost all the tools
    +1

    The Helper Discord

    Members online

    No members online now.

    Affiliates

    Hive Workshop NUON Dome World Editor Tutorials

    Network Sponsors

    Apex Steel Pipe - Buys and sells Steel Pipe.
    Top