I get the LNK2001 linking error when trying to build this code in MSVC++5

I have looked at the help files and i think it has something to do with Extern variables or something, but i dont understand why? The code compiles with 0 errors and 0 warnings

here is the code as i cant seem to post attachements yet
///////////////////////////////////////////////////////////////////////////////////
MAIN.CPP

#include <windows.h>
#include "generic.h"

HINSTANCE hInst; // current instance

LPCTSTR lpszAppName = "Generic";
LPCTSTR lpszTitle = "Generic";

BOOL RegisterWin95(CONST WNDCLASS* lpwc);

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg; //message
HWND hWnd; //windows handler
WNDCLASS wc;

wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = 0;
wc.hIcon = LoadIcon(hInstance,lpszAppName);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = lpszAppName;
wc.lpszClassName = lpszAppName;

if (!RegisterWin95(&wc))
return false;
hInst = hInstance;
hWnd = CreateWindow(lpszAppName,lpszTitle,
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,
CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
if (!hWnd)
return false;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}

BOOL RegisterWin95(CONST WNDCLASS* lpwc)
{
WNDCLASSEX wcex;

wcex.style = lpwc->style;
wcex.lpfnWndProc = lpwc->lpfnWndProc;
wcex.cbClsExtra = lpwc->cbClsExtra;
wcex.hInstance = lpwc->hInstance;
wcex.hIcon = lpwc->hIcon;
wcex.hCursor = lpwc->hCursor;
wcex.hbrBackground = lpwc->hbrBackground;
wcex.lpszMenuName = lpwc->lpszMenuName;
wcex.lpszClassName = lpwc->lpszClassName;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.hIconSm = LoadIcon(wcex.hInstance,"SMALL");

return RegisterClassEx(&wcex);
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{

case IDM_TEST :
break;
case IDM_EXIT :
DestroyWindow(hWnd);
break;
}
break;
case WM_DESTROY :
PostQuitMessage(0);
break;
default :
return(DefWindowProc(hWnd,uMsg,wParam,lParam));
}
return(0L);
}

///////////////////////////////////////////////////////////////////////////////////

Here is "generic.h"

#define IDM_EXIT 100
#define IDM_TEST 200
#define IDM_ABOUT 300

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK About (HWND,UINT,WPARAM,LPARAM);

////////////////////////////////////////////////////////////////////////////////////

Please please someone try this code out in MSVC++ 5 or later and see what my problems are? Or even point me in the direction of a solution?

Thanks for your time.