Sign in to follow this  

damn linker error

This topic is 4688 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I get this error whenever I try to compile my win32 project dxutil.obj : error LNK2019: unresolved external symbol __imp__timeGetTime@0 referenced in function "float __stdcall DXUtil_Timer(enum TIMER_COMMAND)" (?DXUtil_Timer@@YGMW4TIMER_COMMAND@@@Z) here is the code I used. I include ddutil.h, ddutil.cpp, dxutil.h, and dxutil.cpp. I also linked ddraw.lib and dxguid.lib ro my project:
#define WIN32_LEAN_AND_MEAN
#include <ddraw.h>
#include <windows.h>
#include "dxutil.h"
#include "ddutil.h"
#include "stdafx.h"
#include "blarg.h"
#define MAX_LOADSTRING 100

// Global Variables:

bool g_bActive = false;
CDisplay *g_pDisplay = NULL;
CSurface *g_pText = NULL;

//function prototypes
bool InitDD(HWND);
void CleanUp();
void GameLoop();



HINSTANCE hInst;							
TCHAR szTitle[MAX_LOADSTRING];					
TCHAR szWindowClass[MAX_LOADSTRING];			


ATOM		        MyRegisterClass(HINSTANCE hInstance);
BOOL		        InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK	About(HWND, UINT, WPARAM, LPARAM);



ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX); 

	wcex.style		= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= (WNDPROC)WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon		= LoadIcon(hInstance, (LPCTSTR)IDI_BLARG);
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= (LPCTSTR)IDC_BLARG;
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

	return RegisterClassEx(&wcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message) 
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam); 
		wmEvent = HIWORD(wParam); 
		
		switch (wmId)
		{
		case IDM_ABOUT:
		DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_CREATE:
        InitDD(hWnd);
        g_bActive=true;
        break;
    case WM_CLOSE:
        g_bActive=false;
        CleanUp();
        DestroyWindow(hWnd);
        break;
    case WM_MOVE:
        g_pDisplay->UpdateBounds();
        break;
    case WM_SIZE:
        g_pDisplay->UpdateBounds();
        break;
    default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}


LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_INITDIALOG:
		return TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
		{
			EndDialog(hDlg, LOWORD(wParam));
			return TRUE;
		}
		break;
	}
	return FALSE;
}



bool InitDD(HWND hWnd)
{
  //dd init code
  g_pDisplay = new CDisplay();
  
  if(FAILED(g_pDisplay->CreateWindowedDisplay(hWnd,640,480)))
  {
    MessageBox(NULL,"Failed to Initialize DirectDraw",
      "DirectDraw Initialization Failure",MB_OK|MB_ICONERROR);
    return false;
  }
  return true;
}


void CleanUp()
{
  SAFE_DELETE(g_pDisplay);
}



void MainLoop()
{
  g_pDisplay->CreateSurfaceFromText(&g_pText,NULL,"DDraw using Common Files",
    RGB(0,0,0),RGB(0,255,0));
  
  g_pDisplay->Clear(0);
  g_pDisplay->Blt(0,0,g_pText,0);
  g_pDisplay->Present();

  g_pText->Destroy();
}




int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int iShowCmd)
{
  WNDCLASSEX wc;
  HWND hWnd;
  MSG lpMsg;

  wc.cbClsExtra=0;
  wc.cbSize=sizeof(WNDCLASSEX);
  wc.cbWndExtra=0;
  wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
  wc.hCursor=LoadCursor(NULL,IDC_ARROW);
  wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
  wc.hInstance=hInstance;
  wc.lpfnWndProc=WndProc;
  wc.lpszClassName="wc";
  wc.lpszMenuName=0;
  wc.style=CS_HREDRAW|CS_VREDRAW;

  if(!RegisterClassEx(&wc))
  {
    MessageBox(NULL,"Couldn't Register Window Class",
      "Window Class Registration Failure",MB_OK|MB_ICONERROR);
    return 0;
  }

  hWnd = CreateWindowEx(NULL,"wc","DirectDraw Common Files in Action",
    WS_POPUPWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,0,0,
    hInstance,0);

  if(hWnd == NULL)
  {
    MessageBox(NULL,"Failed to Create Window","Window Creation Failure",
      MB_OK|MB_ICONERROR);
    return 0;
  }

  ShowWindow(hWnd,SW_SHOW);
  UpdateWindow(hWnd);

  while(lpMsg.message != WM_QUIT)
  {
    if(PeekMessage(&lpMsg,0,0,0,PM_REMOVE))
    {
      TranslateMessage(&lpMsg);
      DispatchMessage(&lpMsg);
    }
    else if(g_bActive)
    {
      MainLoop();
    }
  }
  return lpMsg.wParam;
}
I can't see what's wrong with it. I include every file and library needed to use to dxutility functions. if you can point out my error, I owuld most appreciative.

Share this post


Link to post
Share on other sites
I have one more error. it's a run-time though:

Run-Time Check #3 - the variable 'lpMsg' is being used without being defined.

I set it up right inside the Winmain function and only use it inside the Winmain function. Do I need to set it to NULL when I declare it?

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int iShowCmd)
{
WNDCLASSEX wc;
HWND hWnd;
MSG lpMsg;

wc.cbClsExtra=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName="wc";
wc.lpszMenuName=0;
wc.style=CS_HREDRAW|CS_VREDRAW;

if(!RegisterClassEx(&wc))
{
MessageBox(NULL,"Couldn't Register Window Class",
"Window Class Registration Failure",MB_OK|MB_ICONERROR);
return 0;
}

hWnd = CreateWindowEx(NULL,"wc","DirectDraw Common Files in Action",
WS_POPUPWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,0,0,
hInstance,0);

if(hWnd == NULL)
{
MessageBox(NULL,"Failed to Create Window","Window Creation Failure",
MB_OK|MB_ICONERROR);
return 0;
}

ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);

while(lpMsg.message != WM_QUIT)
{
if(PeekMessage(&lpMsg,0,0,0,PM_REMOVE))
{
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
else if(g_bActive)
{
MainLoop();
}
}
return lpMsg.wParam;
}

Share this post


Link to post
Share on other sites

This topic is 4688 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this