|
Newbie
Join Date: May 2008
Posts: 6
Rep Power: 0 
|
what does undefined reference mean?
so i have this code that i found online:
// needed headers #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <io.h> // _access() #include <ocidl.h> // LPPICTURE #include <olectl.h> // OleLoadPicture() #include <ole2.h> // CreateStreamOnHGlobal // these are the needed libraries #pragma comment(lib,"uuid.lib") #pragma comment(lib,"ole32.lib") #pragma comment(lib,"oleaut32.lib") // macro #define Show(Window) RedrawWindow(Window,0,0,0);ShowWindow(Window,SW_SHOW); // globals static HINSTANCE BCX_hInstance; static int BCX_ScaleX; static int BCX_ScaleY; static char BCX_ClassName[80]; static HWND Form1; static HWND Jpg1; // prototypes HWND BCX_Form(char*,int=0,int=0,int=250,int=150,int=0,int=0); HWND BCX_OlePicture(char*,HWND=0,int=0,int=0,int=0,int=0,int=0,int=0,int=0,int=0); STDAPI OleLoadPicture(LPSTREAM, LONG, BOOL, REFIID, LPVOID *); void FormLoad (void); LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); // standard main for Windows Graphics User Interface (GUI) int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR CmdLine,int CmdShow) { WNDCLASS Wc; MSG Msg; // ***************************** strcpy(BCX_ClassName,"JPEG_FILE1"); // ************************************ // Scale Dialog Units To Screen Units // use of pixels has not been specified // ************************************ RECT rc = {0,0,4,8}; MapDialogRect (NULL,&rc); BCX_ScaleX = rc.right/2; BCX_ScaleY = rc.bottom/4; BCX_hInstance = hInst; // ****************************************************** Wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; Wc.lpfnWndProc = WndProc; Wc.cbClsExtra = 0; Wc.cbWndExtra = 0; Wc.hInstance = hInst; Wc.hIcon = LoadIcon(NULL,IDI_WINLOGO); // standard icon Wc.hCursor = LoadCursor(NULL,IDC_ARROW); // standard cursor Wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); Wc.lpszMenuName = NULL; Wc.lpszClassName = BCX_ClassName; RegisterClass(&Wc); FormLoad(); // message loop while(GetMessage(&Msg,NULL,0,0)) { HWND hActiveWindow = GetActiveWindow(); if (!IsWindow(hActiveWindow) || !IsDialogMessage(hActiveWindow,&Msg)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } return Msg.wParam; } // create the Windows form HWND BCX_Form(char *Caption, int X, int Y, int W, int H, int Style, int Exstyle) { HWND A; // assign a default style if (!Style) { Style= WS_MINIMIZEBOX | WS_SIZEBOX | WS_CAPTION | WS_MAXIMIZEBOX | WS_POPUP | WS_SYSMENU; } A = CreateWindowEx(Exstyle,BCX_ClassName,Caption, Style, X*BCX_ScaleX, Y*BCX_ScaleY, (4+W)*BCX_ScaleX, (12+H)*BCX_ScaleY, NULL,(HMENU)NULL,BCX_hInstance,NULL); // assign a default font SendMessage(A,(UINT)WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT), (LPARAM)MAKELPARAM(FALSE,0)); return A; } // this is the meat! HWND BCX_OlePicture(char* szFile,HWND hWnd,int id,int X,int Y,int W,int H, int Res,int Style,int Exstyle) { HWND A; HBITMAP hBitmap; DWORD dwFileSize; DWORD dwBytesRead; HANDLE hFile; LPPICTURE gpPicture; LPVOID lpPicData; LPVOID pvData; LPSTREAM pstm; LPVOID hrlp; HGLOBAL hGlobal; // assign a default style if (!Style) Style=WS_CHILD|WS_VISIBLE|WS_TABSTOP|SS_BITMAP; A=CreateWindowEx(Exstyle,"static",NULL,Style,X*BCX_ScaleX,Y*BCX_ScaleY,0,0,hWnd,(HMENU)(HMENU)id,BCX_hInstance,NULL); // in case image is resource, fancier than needs to be if (Res) { hrlp=FindResource(BCX_hInstance,MAKEINTRESOURCE(Res),RT_RCDATA); if (hrlp!=0) { dwFileSize=SizeofResource(BCX_hInstance,hrlp); hGlobal=LoadResource(BCX_hInstance,hrlp); if (hGlobal!=0) { lpPicData=LockResource(hGlobal); pvData=NULL; hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize); pvData=GlobalLock(hGlobal); CopyMemory(pvData,lpPicData,dwFileSize); GlobalUnlock(hGlobal); } } else return NULL; } else { hFile=CreateFile(szFile,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); dwFileSize=GetFileSize(hFile,NULL); if(dwFileSize==-1) return NULL; pvData=NULL; hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize); pvData=GlobalLock(hGlobal); ReadFile(hFile,pvData,dwFileSize,&dwBytesRead,NULL); GlobalUnlock(hGlobal); CloseHandle(hFile); } CreateStreamOnHGlobal(hGlobal,TRUE,&pstm); OleLoadPicture(pstm,0,FALSE,&IID_IPicture,(LPVOID*)&gpPicture); pstm->lpVtbl->Release(pstm); gpPicture->lpVtbl->get_Handle(gpPicture,(OLE_HANDLE*)&hBitmap); if (W || H) hBitmap = CopyImage(hBitmap,IMAGE_BITMAP,W*BCX_ScaleX,H*BCX_ScaleY,LR_COPYRETURNORG); SendMessage(A,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBitmap); if (W || H) SetWindowPos(A,HWND_TOP,X*BCX_ScaleX,Y*BCX_ScaleY,W*BCX_ScaleX,H*BCX_ScaleY,SWP_DRAWFRAME); return A; } // details like title, corner coordinates,width,height,filename to load void FormLoad (void) { char filename[80]; Form1=BCX_Form("Display a JPEG from a file ... ",0,0,260,145); // change filename to whatever image file you have!!!!!!!!!!!!!!!!!!!!!!! strcpy(filename,"Audi.jpg"); if ( _access(filename,0) != 0) ExitProcess(0); // width, height = 0,0 adjusts automatically to image Jpg1=BCX_OlePicture(filename,Form1,115,1,1,0,0); Show(Form1); } // message handler LRESULT CALLBACK WndProc (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { // cleanup and exit program if (Msg == WM_DESTROY) { UnregisterClass(BCX_ClassName,BCX_hInstance); PostQuitMessage(0); } return DefWindowProc(hWnd,Msg,wParam,lParam); } and when i try to compile it it says that there is an undefined reference on the line (possibly 163) where it says IID_IPicture. how can i fix so i can see how this program works?
|