Code:
#define Func(x) EXTERN_C int WINAPI x(HWND mWnd, HWND aWnd, TCHAR *data, TCHAR *parms, BOOL show, BOOL nopause)


that's what Func() meant

Code:
#define WIN32_LEAN_AND_MEAN

#include <afx.h>
#include <afxwin.h>
#include <windows.h>

typedef struct {
	DWORD  mVersion;
	HWND   mHwnd;
	BOOL   mKeep;
	BOOL   mUnicode;
} LOADINFO;

HWND mIRC_window;

#define ClassName "DLLWindowClass"
#define MYMENU_EXIT         (WM_APP + 101)
#define MYMENU_MESSAGEBOX   (WM_APP + 102) 

LRESULT WINAPI DLLWindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch (message)
    {
		case WM_COMMAND:
               switch(wParam)
               {
                    case MYMENU_EXIT:
						SendMessage(hwnd, WM_CLOSE, 0, 0);
                        break;
                    case MYMENU_MESSAGEBOX:
						MessageBox(hwnd, _T("Test"), _T("MessageBox"), MB_OK);
                        break;
               }
               break;
		case WM_DESTROY:
			PostQuitMessage (0);
			break;
		default:
			return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

// Creating our window's Menu
HMENU CreateDLLWindowMenu() {
	HMENU hMenu;
	hMenu = CreateMenu();
	HMENU hMenuPopup;
    if(hMenu==NULL)
        return FALSE;
    hMenuPopup = CreatePopupMenu();
	AppendMenu (hMenuPopup, MF_STRING, MYMENU_EXIT, _T("Exit"));
    AppendMenu (hMenu, MF_POPUP, (UINT_PTR) hMenuPopup, _T("File")); 

	hMenuPopup = CreatePopupMenu();
    AppendMenu (hMenuPopup, MF_STRING, MYMENU_MESSAGEBOX, _T("MessageBox")); 
    AppendMenu (hMenu, MF_POPUP, (UINT_PTR) hMenuPopup, _T("Test")); 
	return hMenu;
}

class Win : public CWinThread {
public:
	Win() {};
	~Win() {};

	virtual int Run() {
		MSG messages;
		while (GetMessage (&messages, NULL, 0, 0))
		{
			TranslateMessage(&messages);
			DispatchMessage(&messages);
		}
		return 0;
	};
	virtual BOOL InitInstance() {
		WNDCLASSEX wc;
		wc.hInstance = NULL;
		wc.lpszClassName = ClassName;
		wc.lpfnWndProc = DLLWindowProc;
		wc.style = CS_DBLCLKS;
		wc.cbSize = sizeof (WNDCLASSEX);
		wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
		wc.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
		wc.hCursor = LoadCursor (NULL, IDC_ARROW);
		wc.lpszMenuName = NULL;
		wc.cbClsExtra = 0;
		wc.cbWndExtra = 0;
		wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
		RegisterClassEx (&wc);

		HMENU hMenu = CreateDLLWindowMenu();
		HWND hwnd = CreateWindowEx (0, ClassName, NULL, WS_EX_PALETTEWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, mIRC_window, hMenu, NULL, NULL );

		if (hwnd) {
			UpdateWindow(hwnd);
			ShowWindow (hwnd, SW_SHOWNORMAL);
			return true;
		}
		return false;
	};
};

Win* x;

EXTERN_C int WINAPI UnloadDll(int TimeOut) {
	//x->ExitInstance();
	//delete x;
	return 0;
}

EXTERN_C void WINAPI LoadDll(LOADINFO *Load) {
	Load->mKeep = 1; // stay loaded
	mIRC_window = Load->mHwnd;
	x = new Win;
	x->InitInstance();
}

EXTERN_C int WINAPI window(HWND mWnd, HWND aWnd, TCHAR *data, TCHAR *parms, BOOL show, BOOL nopause) {
	return 1;
}


and this compiled flawlessly
tested with mirc both window menu functions worked