Thread: A bunch of Linker Errors...

  1. #1
    Registered User
    Join Date
    Nov 2004
    Location
    Pennsylvania
    Posts
    434

    A bunch of Linker Errors...

    Hi guys, im working on the source code in this book "Programming Windows Fifth Edition" For some reason this sample program wont work, i get a bunch of linker errors. After just typing ALL this out its a little dissapointing. I think its probably because im useing Dev C++ instead of VC++. Am i missing libraries or something? Heres the code in case you need it. Please could someone tell me how to fix this? Thanks!

    Sysmets.h
    Code:
    /*------------------------------------------------
        SYSMETS.H -- System Metrics Display Structure
    ------------------------------------------------*/
    
    #define NUMLINES ((int)(sizeof sysmetrics / sizeof sysmetrics [0]))
    
    struct
    {
        int iIndex;
        TCHAR * szLabel;
        TCHAR * szDesc;
    }
    sysmetrics[] =
    {
        SM_CXSCREEN,            TEXT("SM_CXSCREEN"),
                                TEXT("Screen width in pixels"),
        SM_CYSCREEN,            TEXT("SM_CYSCREEN"),    
                                TEXT("Screen height in pixels"),
        SM_CXVSCROLL,           TEXT("SM)CXVSCROOL"),
                                TEXT("Vertical Scroll Width"),
        SM_CYHSCROLL,           TEXT("SM_CYHSCROLL"),
                                TEXT("Horizontal Scroll Height"),
        SM_CYCAPTION,           TEXT("SM_CYCAPTION"),
                                TEXT("Caption Bar Height"),
        SM_CXBORDER,            TEXT("SM_CXBORDER"),
                                TEXT("Window border width"),
        SM_CYBORDER,            TEXT("SM_CYBORDER"),
                                TEXT("Window border height"),
        SM_CXFIXEDFRAME,        TEXT("SM_CXFIXEDFRAME"),
                                TEXT("Dialog window frame width"),
        SM_CYFIXEDFRAME,        TEXT("SM_CYFIXEDFRAME"),
                                TEXT("Dialog window frame height"),
        SM_CYVTHUMB,            TEXT("SM_CYVTHUMB"),
                                TEXT("Vertical scroll thumb height"),
        SM_CXHTHUMB,            TEXT("SM_CXHTHUMB"),
                                TEXT("Horizontal scroll thumb width"),
        SM_CXICON,              TEXT("SM_CXICON"),
                                TEXT("Icon Width"),
        SM_CYICON,              TEXT("SM_CYICON"),
                                TEXT("Icon Height"),
        SM_CXCURSOR,            TEXT("SM_CXCURSOR"),
                                TEXT("Cursor Width"),
        SM_CYCURSOR,            TEXT("SM_CYCURSOR"),
                                TEXT("Cursor Height"),
        SM_CYMENU,              TEXT("SM_CYMENU"),
                                TEXT("Menu Bar Height"),
        SM_CXFULLSCREEN,        TEXT("SM_CXFULLSCREEN"),
                                TEXT("Full screen client area width"),
        SM_CYFULLSCREEN,        TEXT("SM_CYFULLSCREEN"),
                                TEXT("Full screen client area height"),
        SM_CYKANJIWINDOW,       TEXT("SM_CYKANJIWINDOW"),
                                TEXT("Kanji Window Height"),
        SM_MOUSEPRESENT,        TEXT("SM_MOUSEPRESENT"),
                                TEXT("Mouse Present Flag"),
        SM_CYVSCROLL,           TEXT("SM_CYVSCROLL"),
                                TEXT("Verical scroll arrow height"),
        SM_CXHSCROLL,            TEXT ("SM_CXHSCROLL"),             
                                  TEXT ("Horizontal scroll arrow width"),
         SM_DEBUG,                TEXT ("SM_DEBUG"),                 
                                  TEXT ("Debug version flag"),
         SM_SWAPBUTTON,           TEXT ("SM_SWAPBUTTON"),            
                                  TEXT ("Mouse buttons swapped flag"),
         SM_CXMIN,                TEXT ("SM_CXMIN"),                 
                                  TEXT ("Minimum window width"),
         SM_CYMIN,                TEXT ("SM_CYMIN"),                 
                                  TEXT ("Minimum window height"),
         SM_CXSIZE,               TEXT ("SM_CXSIZE"),                
                                  TEXT ("Min/Max/Close button width"),
         SM_CYSIZE,               TEXT ("SM_CYSIZE"),                
                                  TEXT ("Min/Max/Close button height"),
         SM_CXSIZEFRAME,          TEXT ("SM_CXSIZEFRAME"),           
                                  TEXT ("Window sizing frame width"),
         SM_CYSIZEFRAME,          TEXT ("SM_CYSIZEFRAME"),           
                                  TEXT ("Window sizing frame height"),
         SM_CXMINTRACK,           TEXT ("SM_CXMINTRACK"),            
                                  TEXT ("Minimum window tracking width"),
         SM_CYMINTRACK,           TEXT ("SM_CYMINTRACK"),            
                                  TEXT ("Minimum window tracking height"),
         SM_CXDOUBLECLK,          TEXT ("SM_CXDOUBLECLK"),           
                                  TEXT ("Double click x tolerance"),
         SM_CYDOUBLECLK,          TEXT ("SM_CYDOUBLECLK"),           
                                  TEXT ("Double click y tolerance"),
         SM_CXICONSPACING,        TEXT ("SM_CXICONSPACING"),         
                                  TEXT ("Horizontal icon spacing"),
         SM_CYICONSPACING,        TEXT ("SM_CYICONSPACING"),         
                                  TEXT ("Vertical icon spacing"),
         SM_MENUDROPALIGNMENT,    TEXT ("SM_MENUDROPALIGNMENT"),     
                                  TEXT ("Left or right menu drop"),
         SM_PENWINDOWS,           TEXT ("SM_PENWINDOWS"),            
                                  TEXT ("Pen extensions installed"),
         SM_DBCSENABLED,          TEXT ("SM_DBCSENABLED"),           
                                  TEXT ("Double-Byte Char Set enabled"),
         SM_CMOUSEBUTTONS,        TEXT ("SM_CMOUSEBUTTONS"),         
                                  TEXT ("Number of mouse buttons"),
         SM_SECURE,               TEXT ("SM_SECURE"),                
                                  TEXT ("Security present flag"),
         SM_CXEDGE,               TEXT ("SM_CXEDGE"),                
                                  TEXT ("3-D border width"),
         SM_CYEDGE,               TEXT ("SM_CYEDGE"),                
                                  TEXT ("3-D border height"),
         SM_CXMINSPACING,         TEXT ("SM_CXMINSPACING"),          
                                  TEXT ("Minimized window spacing width"),
         SM_CYMINSPACING,         TEXT ("SM_CYMINSPACING"),          
                                  TEXT ("Minimized window spacing height"),
         SM_CXSMICON,             TEXT ("SM_CXSMICON"),              
                                  TEXT ("Small icon width"),
         SM_CYSMICON,             TEXT ("SM_CYSMICON"),              
                                  TEXT ("Small icon height"),
         SM_CYSMCAPTION,          TEXT ("SM_CYSMCAPTION"),           
                                  TEXT ("Small caption height"),
         SM_CXSMSIZE,             TEXT ("SM_CXSMSIZE"),              
                                  TEXT ("Small caption button width"),
         SM_CYSMSIZE,             TEXT ("SM_CYSMSIZE"),              
                                  TEXT ("Small caption button height"),
         SM_CXMENUSIZE,           TEXT ("SM_CXMENUSIZE"),            
                                  TEXT ("Menu bar button width"),
         SM_CYMENUSIZE,           TEXT ("SM_CYMENUSIZE"),            
                                  TEXT ("Menu bar button height"),
         SM_ARRANGE,              TEXT ("SM_ARRANGE"),               
                                  TEXT ("How minimized windows arranged"),
         SM_CXMINIMIZED,          TEXT ("SM_CXMINIMIZED"),           
                                  TEXT ("Minimized window width"),
         SM_CYMINIMIZED,          TEXT ("SM_CYMINIMIZED"),           
                                  TEXT ("Minimized window height"),
         SM_CXMAXTRACK,           TEXT ("SM_CXMAXTRACK"),            
                                  TEXT ("Maximum draggable width"),
         SM_CYMAXTRACK,           TEXT ("SM_CYMAXTRACK"),            
                                  TEXT ("Maximum draggable height"),
         SM_CXMAXIMIZED,          TEXT ("SM_CXMAXIMIZED"),           
                                  TEXT ("Width of maximized window"),
         SM_CYMAXIMIZED,          TEXT ("SM_CYMAXIMIZED"),           
                                  TEXT ("Height of maximized window"),
         SM_NETWORK,              TEXT ("SM_NETWORK"),               
                                  TEXT ("Network present flag"),
         SM_CLEANBOOT,            TEXT ("SM_CLEANBOOT"),             
                                  TEXT ("How system was booted"),
         SM_CXDRAG,               TEXT ("SM_CXDRAG"),                
                                  TEXT ("Avoid drag x tolerance"),
         SM_CYDRAG,               TEXT ("SM_CYDRAG"),                
                                  TEXT ("Avoid drag y tolerance"),
         SM_SHOWSOUNDS,           TEXT ("SM_SHOWSOUNDS"),            
                                  TEXT ("Present sounds visually"),
         SM_CXMENUCHECK,          TEXT ("SM_CXMENUCHECK"),           
                                  TEXT ("Menu check-mark width"),
         SM_CYMENUCHECK,          TEXT ("SM_CYMENUCHECK"),           
                                  TEXT ("Menu check-mark height"),
         SM_SLOWMACHINE,          TEXT ("SM_SLOWMACHINE"),           
                                  TEXT ("Slow processor flag"),
         SM_MIDEASTENABLED,       TEXT ("SM_MIDEASTENABLED"),        
                                  TEXT ("Hebrew and Arabic enabled flag"),
         SM_MOUSEWHEELPRESENT,    TEXT ("SM_MOUSEWHEELPRESENT"),     
                                  TEXT ("Mouse wheel present flag"),
         SM_XVIRTUALSCREEN,       TEXT ("SM_XVIRTUALSCREEN"),        
                                  TEXT ("Virtual screen x origin"),
         SM_YVIRTUALSCREEN,       TEXT ("SM_YVIRTUALSCREEN"),        
                                  TEXT ("Virtual screen y origin"),
         SM_CXVIRTUALSCREEN,      TEXT ("SM_CXVIRTUALSCREEN"),       
                                  TEXT ("Virtual screen width"),
         SM_CYVIRTUALSCREEN,      TEXT ("SM_CYVIRTUALSCREEN"),       
                                  TEXT ("Virtual screen height"),
         SM_CMONITORS,            TEXT ("SM_CMONITORS"),             
                                  TEXT ("Number of monitors"),
         SM_SAMEDISPLAYFORMAT,    TEXT ("SM_SAMEDISPLAYFORMAT"),     
                                  TEXT ("Same color format flag")
    } ;

    Heres the Actual Program:
    Code:
    /*-----------------------------------------------
        SYSMETS1 -- System Metrics Display Program 1
    -----------------------------------------------*/
    
    #include <windows.h>
    #include "Sysmets.h"
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[]=TEXT("Sysmets1");
        HWND hwnd;
        MSG msg;
        WNDCLASS wndclass;
        
        wndclass.style = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc = WndProc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = szAppName;
        
        if(!RegisterClass(&wndclass))
        {
            MessageBox(NULL, TEXT("This Program Requires Windows NT!"), szAppName, MB_ICONERROR);
            return 0;
        }
        
        hwnd=CreateWindow(szAppName, TEXT("Get System Metrics No. 1"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL);
        
        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);
        
        while(GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static int cxChar, cxCaps, cyChar;
        HDC hdc;
        int i;
        PAINTSTRUCT ps;
        TCHAR szBuffer[10];
        TEXTMETRIC tm;
        
        switch(message)
        {
            case WM_CREATE:
                hdc=GetDC(hwnd);
                GetTextMetrics(hdc, &tm);
                cxChar=tm.tmAveCharWidth;
                cxCaps=(tm.tmPitchAndFamily & 1 ? 3 : 2)* cxChar / 2;
                cyChar=tm.tmHeight + tm.tmExternalLeading;
                ReleaseDC(hwnd, hdc);
                return 0;
            case WM_PAINT:
                hdc=BeginPaint(hwnd, &ps);
                for(i=0; i<NUMLINES; i++)
                {
                    TextOut(hdc, 0, cyChar * i, sysmetrics[i].szLabel, lstrlen(sysmetrics[i].szLabel));
                    
                    TextOut(hdc, 22 * cxCaps, cyChar * i, sysmetrics[i].szDesc, lstrlen(sysmetrics[i].szDesc));
                    
                    SetTextAlign(hdc, TA_RIGHT | TA_TOP);
                    TextOut(hdc, 22 * cxCaps +40 * cxChar, cyChar * i, szBuffer, wsprintf(szBuffer, TEXT ("%5d"),
                            GetSystemMetrics(sysmetrics[i].iIndex)));
                    SetTextAlign(hdc, TA_LEFT | TA_TOP);
                }
                EndPaint(hwnd, &ps);
                return 0;
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
        }
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    Thanks for any help you can give, maybe i just need some libraries or something, thanks!

    PS- Im running Windows XP Home Edition, here are some of the errors:

    C:\DOCUME~1\Douglas\LOCALS~1\Temp\ccWAbaaa.o(.text +0xdc0) In function `Z7WndProcP6HWND__jjl':
    [Linker error] undefined reference to `GetTextMetricsA@8'
    [Linker error] undefined reference to `TextOutA@20'
    [Linker error] undefined reference to `SetTextAlign@8'

    Thanks again!

  2. #2
    Registered User
    Join Date
    Nov 2004
    Location
    Pennsylvania
    Posts
    434
    Anyone? I was thinking maybe VB has some libraries that my DevC++ Doesnt? Please any help you can give, i cant move on until i get this one working. If i do move on i cant be sure that the next program will or will not work. Thanks again!

  3. #3
    Registered User
    Join Date
    Sep 2004
    Location
    California
    Posts
    3,268
    You need to link to GDI32.lib

  4. #4
    Frequently Quite Prolix dwks's Avatar
    Join Date
    Apr 2005
    Location
    Canada
    Posts
    8,057
    I think its probably because im useing Dev C++ instead of VC++. Am i missing libraries or something?
    VC++ automatically links GDI32.lib.

    To link with it in Dev-C++, add it in Project Options or maybe Compiler options, I don't remember which.
    dwk

    Seek and ye shall find. quaere et invenies.

    "Simplicity does not precede complexity, but follows it." -- Alan Perlis
    "Testing can only prove the presence of bugs, not their absence." -- Edsger Dijkstra
    "The only real mistake is the one from which we learn nothing." -- John Powell


    Other boards: DaniWeb, TPS
    Unofficial Wiki FAQ: cpwiki.sf.net

    My website: http://dwks.theprogrammingsite.com/
    Projects: codeform, xuni, atlantis, nort, etc.

  5. #5
    Registered User
    Join Date
    Nov 2004
    Location
    Pennsylvania
    Posts
    434
    Thanks guys i appreciate it! How do i include it? I am assuming i dont use #include because that didnt work. I found the file (libgdi32.a) but how do i get it into the code? Thanks!

    EDIT: Ok, i got it to work by doing things in a project. My quick (last) question is: Will i have to do a Project everytime i want to use gdi32? I suppose i wont be able to just click new file and write up some code i will have to do so in a project, oh well, at least it works! Thanks!
    Last edited by Junior89; 01-07-2006 at 01:45 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Linker errors with 2005 Express
    By thetinman in forum Windows Programming
    Replies: 4
    Last Post: 12-30-2006, 09:04 AM
  2. Linker Errors
    By beene in forum Game Programming
    Replies: 6
    Last Post: 11-18-2006, 12:09 PM
  3. Question About Linker Errors In Dev-C++
    By ShadowMetis in forum C++ Programming
    Replies: 9
    Last Post: 08-18-2004, 08:42 PM
  4. help, linker errors when adding library file to project
    By ngcfan525 in forum C++ Programming
    Replies: 1
    Last Post: 03-09-2003, 02:27 PM
  5. Linker errors with simple static library
    By Dang in forum Windows Programming
    Replies: 5
    Last Post: 09-08-2001, 09:38 AM