Getting FunctionX Tutorial to Work
Hi,
I've been trying to do some of the examples on functionx.com, but I'm having difficulty getting one of them to compile. I'm working from this tutorial:
Win32 Programming - Lesson 6: Object-Oriented Win32
I copied out the code for the example program beneath the heading "Win32 Object Programming", which is about halfway down that page. As instructed, I created "MainWnd.h", "WinApp.h", "WinApp.cpp", and "Exercise.cpp".
Initially, I had a few problems with converting between different types of char variable. SO in exercise.cpp, I changed WinMain to look like this:
Code:
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
LPSTR lpCmdLine, int nCmdShow)
{
MSG Msg;
LPCTSTR ClsName_T = L"Win32OOP";
LPCTSTR WndName = L"Object-Oriented Win32 Programming";
int copy1 = 0;
char *ClsName_CH = "";
copy1 = WideCharToMultiByte(CP_ACP, WC_SEPCHARS, ClsName_T, -1, ClsName_CH, -1, NULL, NULL);
// Initialize the application class
WApplication WinApp(hInstance, ClsName_CH, MainWndProc);
WinApp.Register();
// Create the main window
WWindow Wnd;
Wnd.Create(hInstance, ClsName_T, WndName);
// Display the main window
Wnd.Show();
// Process the main window's messages
while ( GetMessage(&Msg, NULL, 0, 0) )
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return 0;
}
Similarly, in WinApp.cpp, I changed WApplication::WApplication to look like this:
Code:
WApplication::WApplication(HINSTANCE hInst, char *ClsName,
WNDPROC WndPrc, LPCTSTR MenuName)
{
int copy1 = 0;
LPCSTR ClsName_C = ClsName;
LPWSTR ClsName_W;
copy1 = MultiByteToWideChar(CP_ACP, WC_SEPCHARS, ClsName_C, -1, ClsName_W, 0);
// Should add error handling code here in case the above returns zero.
// Initializing the application using the application member variable
_WndClsEx.cbSize = sizeof(WNDCLASSEX);
_WndClsEx.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
_WndClsEx.lpfnWndProc = WndPrc;
_WndClsEx.cbClsExtra = 0;
_WndClsEx.cbWndExtra = 0;
_WndClsEx.hInstance = hInst;
_WndClsEx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
_WndClsEx.hCursor = LoadCursor(NULL, IDC_ARROW);
_WndClsEx.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
_WndClsEx.lpszMenuName = MenuName;
_WndClsEx.lpszClassName = ClsName_W;
_WndClsEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
}
That got rid of the compiler errors relating to the conversions between the char variables, but another problem arose. When I tried to compile, I got "3 unresolved externals". They are:
Exercise.obj : error LNK2019: unresolved external symbol "public: int __thiscall WWindow::Show(int)" (?Show@WWindow@@QAEHH@Z) referenced in function _WinMain@16
Exercise.obj : error LNK2019: unresolved external symbol "public: struct HWND__ * __thiscall WWindow::Create(struct HINSTANCE__ *,wchar_t const *,wchar_t const *,struct HWND__ *,unsigned long,unsigned long,int,int,int,int)" (?Create@WWindow@@QAEPAUHWND__@@PAUHINSTANCE__@@PB _W1PAU2@KKHHHH@Z) referenced in function _WinMain@16
Exercise.obj : error LNK2019: unresolved external symbol "public: __thiscall WWindow::WWindow(void)" (??0WWindow@@QAE@XZ) referenced in function _WinMain@16
Does anyone know how I can fix this problem? After looking around for a solution, I think I may need to include some libraries or something but I'm not sure how exactly.
Thanks.