#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <windowsx.h>
#include <tchar.h>

#define EXPORT extern "C" __declspec(dllexport)

EXPORT int add_num(int a, int b) { return (a + b); }
EXPORT int sub_num(int a, int b) { return (a - b); }

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        MessageBox(GetActiveWindow(), 
            _T("Process Attach!"), _T("Message"), MB_OK);
        break;
    case DLL_THREAD_ATTACH:
        MessageBox(GetActiveWindow(), 
            _T("Thread Attach!"), _T("Message"), MB_OK);
        break;
    case DLL_THREAD_DETACH:
        MessageBox(GetActiveWindow(), 
            _T("Thread Detach!"), _T("Message"), MB_OK);
        break;
    case DLL_PROCESS_DETACH:
        MessageBox(GetActiveWindow(), 
            _T("Process Detach!"), _T("Message"), MB_OK);
        break;
    }
    return TRUE;
}