July 28th, 2011 06:40 PM
#1
unresolved external errors
This problem has stumped me all afternoon. I have 2 function in the gameInititalize header, they are defined in Engine.cpp, and called in Entry.cpp. I had same problems with some DirectX function calls, but they when away when I did pragma for 2 directX libraries. Help is appreciated.
errors
Code:
error LNK2019: unresolved external symbol "void __cdecl gameEnd(void)" (?gameEnd@@YAXXZ) referenced in function _WinMain@16
error LNK2019: unresolved external symbol "void __cdecl gameRun(struct HWND__ *)" (?gameRun@@YAXPAUHWND__@@@Z) referenced in function _WinMain@16
gameInitialize.h
Code:
#include <d3d9.h>
#include <d3dx9.h>
#include <windows.h>
#include <string>
using namespace std;
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
extern LPDIRECT3DDEVICE9 d3ddev;
extern LPDIRECT3D9 d3d;
extern LPDIRECT3DSURFACE9 backbuffer;
extern LPDIRECT3DTEXTURE9 Left_L;
extern LPDIRECT3DTEXTURE9 Left_Z;
extern LPDIRECT3DTEXTURE9 Right_L;
extern LPDIRECT3DTEXTURE9 Right_Z;
extern LPDIRECT3DTEXTURE9 Square;
extern LPDIRECT3DTEXTURE9 T_Shape;
extern LPDIRECT3DTEXTURE9 VerticalShape;
void gamenInit(HWND window);
void gameRun(HWND window);
void gameEnd();
void loadTextures();
LPDIRECT3DTEXTURE9 loadFile(string name);
Engine.cpp
Code:
#include "Collision.h"
#include "Shape.h"
#include "shapeConstructor.h"
#include "userInterfaces.h"
#include "gameInitialize.h"
int SCREENW = 1024;
int SCREENH = 768;
LPDIRECT3DDEVICE9 d3ddev = NULL;
LPDIRECT3D9 d3d = NULL;
LPDIRECT3DSURFACE9 backbuffer = NULL;
LPDIRECT3DTEXTURE9 Left_L = NULL;
LPDIRECT3DTEXTURE9 Left_Z = NULL;
LPDIRECT3DTEXTURE9 Right_L = NULL;
LPDIRECT3DTEXTURE9 Right_Z = NULL;
LPDIRECT3DTEXTURE9 Square = NULL;
LPDIRECT3DTEXTURE9 T_Shape = NULL;
LPDIRECT3DTEXTURE9 VerticalShape = NULL;
void gamenInit(HWND window)
{
d3d = Direct3DCreate9(D3D_SDK_VERSION);
//set Direct3D presentation parameters
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = SCREENW;
d3dpp.BackBufferHeight = SCREENH;
d3dpp.hDeviceWindow = window;
//create Direct3D device
d3d->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
//get a pointer to the back buffer surface
d3ddev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);
}
void loadTextures()
{
Left_L = loadFile("Left_L");
Left_Z = loadFile("Left_Z");
Right_L = loadFile("Right_L");
Right_Z = loadFile("Right_Z");
Square = loadFile("Square");
T_Shape = loadFile("T_Shape");
VerticalShape = loadFile("VerticalShape");
}
LPDIRECT3DTEXTURE9 loadFile(string name)
{
D3DXIMAGE_INFO info;
LPDIRECT3DTEXTURE9 texture = NULL;
D3DCOLOR transcolor = D3DCOLOR_XRGB(0,0,0);
HRESULT result = D3DXGetImageInfoFromFile(name.c_str(), &info);
D3DXCreateTextureFromFileEx(
d3ddev, //Direct3D device object
name.c_str(), //bitmap filename
info.Width, //bitmap image width
info.Height, //bitmap image height
1, //mip-map levels (1 for no chain)
D3DPOOL_DEFAULT, //the type of surface (standard)
D3DFMT_UNKNOWN, //surface format (default)
D3DPOOL_DEFAULT, //memory class for the texture
D3DX_DEFAULT, //image filter
D3DX_DEFAULT, //mip filter
transcolor, //color key for transparency
&info, //bitmap file info (from loaded file)
NULL, //color palette
&texture );
return texture;
}
Entry.cpp
Code:
#include <windows.h>
#include "gameInitialize.h"
bool gameover = false;
using namespace std;
LRESULT WINAPI WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
gameover = true;
PostQuitMessage(0);
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//initialize window settings
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "Tetris";
wc.hIconSm = NULL;
RegisterClassEx(&wc);
//create a new window
HWND window = CreateWindow( "Tetris", "Tetris",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
1024, 768, NULL, NULL, hInstance, NULL);
if (window == 0) return 0;
//display the window
ShowWindow(window, nCmdShow);
UpdateWindow(window);
//initialize the game
gamenInit(window);
// main message loop
MSG message;
while (!gameover)
{
if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
//process game loop
gameRun(window);
}
//shutdown
gameEnd();
return message.wParam;
}
July 28th, 2011 07:02 PM
#2
Re: unresolved external errors
I managed to fix it. I didnt define functions gameRun() and gameEnd() in the Engine cpp file.
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules
Click Here to Expand Forum to Full Width
Bookmarks