Archived

This topic is now archived and is closed to further replies.

help with directx

This topic is 5614 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''ve spent the last couple months trying to use directx. and failed miserably. i''ve tried every example i could find with no success (compiling errors). when i finally find a program with no compiling errors to fix, i then run into a whole new set of errors. linking errors... whenever i execute the program i get these errors: Linking... ddex2.obj : error LNK2001: unresolved external symbol _DirectDrawCreateEx@16 ddex2.obj : error LNK2001: unresolved external symbol _IID_IDirectDraw7 LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/ddex2.exe : fatal error LNK1120: 3 unresolved externals Error executing link.exe. my first guess is that the paths are incorrect. so i opened up DXSETENV.BAT and changed the paths to: REM set 32 bit C Compiler set c32_ROOT = C:\Program Files\Microsoft Visual Studio REM set DirectX SDK Path Set DXSDKROOT=C:\mssdk but i still get the same errors. can anybody help solve this problem?

Share this post


Link to post
Share on other sites
Make sure the order of your include and lib directories is set up properly in the Visual C++ Options dialog.

Any user-installed DirectX SDK include and lib directories should be ABOVE the rest to ensure they''re looked in first.

Then you should just be able to #include <ddraw.h> and link to ddraw.lib and dxguid.lib.


Helpful links:
How To Ask Questions The Smart Way | Google can help with your question | Search MSDN for help with standard C or Windows functions

Share this post


Link to post
Share on other sites
first off, the win32 app did get rid of the _main error. as for the ddraw.lib, i'm not quite sure how to link the .lib file.

with the ddrawex.h i still got the same errors.

my directories are set up as:
C:\MSSDK\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE

so i'm still stuck with the other two errors:
dex2.obj : error LNK2001: unresolved external symbol _DirectDrawCreateEx@16
ddex2.obj : error LNK2001: unresolved external symbol _IID_IDirectDraw7

so if anybody can tell me how to link to the .lib files i might be able to get rid of the other errors.

[edited by - oni_viper on July 24, 2002 5:56:50 PM]

Share this post


Link to post
Share on other sites
You''re using VC++ so...

Menu: Project->Settings->Link Tab

Under Object/Library and Modules (where you see kernel32.lib etc) add ddraw.lib and dxguid.lib



I will not make a list of links... I will not make a list of links... I will not make a list of links...
Invader''s Realm

Share this post


Link to post
Share on other sites
thanks, that fixed the linking errors. but now there''s another problem (sometimes i wonder if directx is worth it). when i run the program, it crashes and message comes up saying DDReLoadBitmap FAILED. what can i do to fix this? i hate to keep asking, the problems just never stop.

Share this post


Link to post
Share on other sites
there are 3 programs. don't judge me on the code, these are examples that came with directx

1) DDEx2.CPP


  
//-----------------------------------------------------------------------------

// File: DDEx2.CPP

//

// Desc: Direct Draw example program 2. Adds functionality to

// example program 1. Changes the video mode to 640x480x8.

// Reads a bitmap file from disk and copies it into the

// back buffer and then slowly flips between the primary

// surface and the back buffer. Press F12 to exit the program.

//

// Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved.

//-----------------------------------------------------------------------------


//#ifndef WIN32_LEAN_AND_MEAN

//#define WIN32_LEAN_AND_MEAN
//#endif

//-----------------------------------------------------------------------------

// Include files

//-----------------------------------------------------------------------------

#include <windows.h>
#include <ddraw.h>
#include <stdio.h>
#include <stdarg.h>
#include "resource.h"
#include "ddutil.h"

//-----------------------------------------------------------------------------

// Local definitions

//-----------------------------------------------------------------------------

#define NAME "DDExample2"
#define TITLE "Direct Draw Example 2"

//-----------------------------------------------------------------------------

// Default settings

//-----------------------------------------------------------------------------

#define TIMER_ID 1
#define TIMER_RATE 500

//-----------------------------------------------------------------------------

// Global data

//-----------------------------------------------------------------------------

LPDIRECTDRAW7 g_pDD = NULL; // DirectDraw object

LPDIRECTDRAWSURFACE7 g_pDDSPrimary = NULL;// DirectDraw primary surface

LPDIRECTDRAWSURFACE7 g_pDDSBack = NULL; // DirectDraw back surface

LPDIRECTDRAWPALETTE g_pDDPal = NULL; // The primary surface palette

BOOL g_bActive = FALSE; // Is application active?


//-----------------------------------------------------------------------------

// Local data

//-----------------------------------------------------------------------------

static char szBackground[] = "BACK";
static char szMsg[] = "Page Flipping Test: Press F12 to exit";
static char szFrontMsg[] = "Front buffer (F12 to quit)";
static char szBackMsg[] = "Back buffer (F12 to quit)";

//-----------------------------------------------------------------------------

// Name: ReleaseAllObjects()

// Desc: Finished with all objects we use; release them

//-----------------------------------------------------------------------------

static void
ReleaseAllObjects(void)
{
if (g_pDD != NULL)
{
if (g_pDDSPrimary != NULL)
{
g_pDDSPrimary->Release();
g_pDDSPrimary = NULL;
}
if (g_pDDPal != NULL)
{
g_pDDPal->Release();
g_pDDPal = NULL;
}
g_pDD->Release();
g_pDD = NULL;
}

}

//-----------------------------------------------------------------------------

// Name: InitFail()

// Desc: This function is called if an initialization function fails

//-----------------------------------------------------------------------------

HRESULT
InitFail(HWND hWnd, HRESULT hRet, LPCTSTR szError,...)
{
char szBuff[128];
va_list vl;

va_start(vl, szError);
vsprintf(szBuff, szError, vl);
ReleaseAllObjects();
MessageBox(hWnd, szBuff, TITLE, MB_OK);
DestroyWindow(hWnd);
va_end(vl);
return hRet;
}

//-----------------------------------------------------------------------------

// Name: UpdateFrame()

// Desc: Displays the proper text for the page

//-----------------------------------------------------------------------------

static void
UpdateFrame(HWND hWnd)
{
static BYTE phase = 0;
HDC hdc;
RECT rc;
SIZE size;

// The back buffer already has a loaded bitmap, so don't clear it

if (g_pDDSBack->GetDC(&hdc) == DD_OK)
{
SetBkColor(hdc, RGB(0, 0, 255));
SetTextColor(hdc, RGB(255, 255, 0));
if (phase)
{
GetClientRect(hWnd, &rc);
GetTextExtentPoint(hdc, szMsg, lstrlen(szMsg), &size);
TextOut(hdc, (rc.right - size.cx) / 2, (rc.bottom - size.cy) / 2,
szMsg, sizeof(szMsg) - 1);
TextOut(hdc, 0, 0, szFrontMsg, lstrlen(szFrontMsg));
phase = 0;
}
else
{
TextOut(hdc, 0, 0, szBackMsg, lstrlen(szBackMsg));
phase = 1;
}
g_pDDSBack->ReleaseDC(hdc);
}
}

//-----------------------------------------------------------------------------

// Name: WindowProc()

// Desc: The Main Window Procedure

//-----------------------------------------------------------------------------

long FAR PASCAL
WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HRESULT hRet;

switch (message)
{
case WM_ACTIVATE:
// Pause if minimized

g_bActive = !((BOOL)HIWORD(wParam));
return 0L;

case WM_DESTROY:
// Clean up and close the app

ReleaseAllObjects();
PostQuitMessage(0);
return 0L;

case WM_KEYDOWN:
// Handle any non-accelerated key commands

switch (wParam)
{
case VK_ESCAPE:
case VK_F12:
PostMessage(hWnd, WM_CLOSE, 0, 0);
return 0L;
}
break;

case WM_SETCURSOR:
// Turn off the cursor since this is a full-screen app

SetCursor(NULL);
return TRUE;

case WM_TIMER:
// Update and flip surfaces

if (g_bActive && TIMER_ID == wParam)
{
UpdateFrame(hWnd);
while (TRUE)
{
hRet = g_pDDSPrimary->Flip(NULL, 0);
if (hRet == DD_OK)
break;
if (hRet == DDERR_SURFACELOST)
{
hRet = g_pDDSPrimary->Restore();
if (hRet != DD_OK)
break;
hRet = DDReLoadBitmap(g_pDDSBack, szBackground);
if (hRet != DD_OK)
break;
}
if (hRet != DDERR_WASSTILLDRAWING)
break;
}
}
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}

//-----------------------------------------------------------------------------

// Name: InitApp()

// Desc: Do work required for every instance of the application:

// Create the window, initialize data

//-----------------------------------------------------------------------------

static HRESULT
InitApp(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
WNDCLASS wc;
DDSURFACEDESC2 ddsd;
DDSCAPS2 ddscaps;
HRESULT hRet;

// Set up and register window class

wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN_ICON));
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH )GetStockObject(BLACK_BRUSH);
wc.lpszMenuName = NAME;
wc.lpszClassName = NAME;
RegisterClass(&wc);

// Create a window

hWnd = CreateWindowEx(WS_EX_TOPMOST,
NAME,
TITLE,
WS_POPUP,
0,
0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
SetFocus(hWnd);

///////////////////////////////////////////////////////////////////////////

// Create the main DirectDraw object

///////////////////////////////////////////////////////////////////////////

hRet = DirectDrawCreateEx(NULL, (VOID**)&g_pDD, IID_IDirectDraw7, NULL);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "DirectDrawCreateEx FAILED");

// Get exclusive mode

hRet = g_pDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "SetCooperativeLevel FAILED");

// Set the video mode to 640x480x8

hRet = g_pDD->SetDisplayMode(640, 480, 8, 0, 0);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "SetDisplayMode FAILED");

// Create the primary surface with 1 back buffer

ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP |
DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
hRet = g_pDD->CreateSurface(&ddsd, &g_pDDSPrimary, NULL);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "CreateSurface FAILED");

// Get a pointer to the back buffer

ZeroMemory(&ddscaps, sizeof(ddscaps));
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
hRet = g_pDDSPrimary->GetAttachedSurface(&ddscaps, &g_pDDSBack);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "GetAttachedSurface FAILED");

// Create and set the palette

g_pDDPal = DDLoadPalette(g_pDD, szBackground);
if (g_pDDPal == NULL)
return InitFail(hWnd, hRet, "DDLoadPalette FAILED");
hRet = g_pDDSPrimary->SetPalette(g_pDDPal);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "SetPalette FAILED");

// Load a bitmap into the back buffer.

hRet = DDReLoadBitmap(g_pDDSBack, szBackground);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "DDReLoadBitmap FAILED");

// Create a timer to flip the pages

if (TIMER_ID != SetTimer(hWnd, TIMER_ID, TIMER_RATE, NULL))
return InitFail(hWnd, hRet, "SetTimer FAILED");

return DD_OK;
}

//-----------------------------------------------------------------------------

// Name: WinMain()

// Desc: Initialization, message loop

//-----------------------------------------------------------------------------

int PASCAL
WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;

if (InitApp(hInstance, nCmdShow) != DD_OK)
return FALSE;

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//---------------------------------------------------------------




2) ddutil.cpp


  
//-----------------------------------------------------------------------------

// File: ddutil.cpp

//

// Desc: Routines for loading bitmap and palettes from resources

//

//

// Copyright (c) 1995-1999 Microsoft Corporation. All rights reserved.

//-----------------------------------------------------------------------------


#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

//-----------------------------------------------------------------------------

// Include files

//-----------------------------------------------------------------------------

#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#include "ddutil.h"

//-----------------------------------------------------------------------------

// Name: DDLoadBitmap()

// Desc: Create a DirectDrawSurface from a bitmap resource.

//-----------------------------------------------------------------------------

extern "C" IDirectDrawSurface7*
DDLoadBitmap( IDirectDraw7* pdd, LPCSTR szBitmap, int dx, int dy)
{
HBITMAP hbm;
BITMAP bm;
DDSURFACEDESC2 ddsd;
IDirectDrawSurface7 *pdds;

//

// Try to load the bitmap as a resource, if that fails, try it as a file

//

hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, dx,
dy, LR_CREATEDIBSECTION);
if (hbm == NULL)
hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, dx, dy,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hbm == NULL)
return NULL;
//

// Get size of the bitmap

//

GetObject(hbm, sizeof(bm), &bm);
//

// Create a DirectDrawSurface for this bitmap

//

ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth = bm.bmWidth;
ddsd.dwHeight = bm.bmHeight;
if (pdd->CreateSurface(&ddsd, &pdds, NULL) != DD_OK)
return NULL;
DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
DeleteObject(hbm);
return pdds;
}

//-----------------------------------------------------------------------------

// Name: DDReLoadBitmap()

// Desc: Load a bitmap from a file or resource into a directdraw surface.

// normaly used to re-load a surface after a restore.

//-----------------------------------------------------------------------------

HRESULT DDReLoadBitmap( IDirectDrawSurface7* pdds, LPCSTR szBitmap)
{
HBITMAP hbm;
HRESULT hr;

//

// Try to load the bitmap as a resource, if that fails, try it as a file

//

hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, 0,
0, LR_CREATEDIBSECTION);
if (hbm == NULL)
hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hbm == NULL)
{
OutputDebugString("handle is null\n");
return E_FAIL;
}
hr = DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
if (hr != DD_OK)
{
OutputDebugString("ddcopybitmap failed\n");
}
DeleteObject(hbm);
return hr;
}

//-----------------------------------------------------------------------------

// Name: DDCopyBitmap()

// Desc: Draw a bitmap into a DirectDrawSurface

//-----------------------------------------------------------------------------

extern "C" HRESULT
DDCopyBitmap(IDirectDrawSurface7* pdds, HBITMAP hbm, int x, int y,
int dx, int dy)
{
HDC hdcImage;
HDC hdc;
BITMAP bm;
DDSURFACEDESC2 ddsd;
HRESULT hr;

if (hbm == NULL || pdds == NULL)
return E_FAIL;
//

// Make sure this surface is restored.

//

pdds->Restore();
//

// Select bitmap into a memoryDC so we can use it.

//

hdcImage = CreateCompatibleDC(NULL);
if (!hdcImage)
OutputDebugString("createcompatible dc failed\n");
SelectObject(hdcImage, hbm);
//

// Get size of the bitmap

//

GetObject(hbm, sizeof(bm), &bm);
dx = dx == 0 ? bm.bmWidth : dx; // Use the passed size, unless zero

dy = dy == 0 ? bm.bmHeight : dy;
//

// Get size of surface.

//

ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
pdds->GetSurfaceDesc(&ddsd);

if ((hr = pdds->GetDC(&hdc)) == DD_OK)
{
StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,
dx, dy, SRCCOPY);
pdds->ReleaseDC(hdc);
}
DeleteDC(hdcImage);
return hr;
}

//-----------------------------------------------------------------------------

// Name: DDLoadPalette()

// Desc: Create a DirectDraw palette object from a bitmap resource

// if the resource does not exist or NULL is passed create a

// default 332 palette.

//-----------------------------------------------------------------------------

extern "C" IDirectDrawPalette *
DDLoadPalette(IDirectDraw7* pdd, LPCSTR szBitmap)
{
IDirectDrawPalette *ddpal;
int i;
int n;
int fh;
HRSRC h;
LPBITMAPINFOHEADER lpbi;
PALETTEENTRY ape[256];
RGBQUAD *prgb;

//

// Build a 332 palette as the default.

//

for (i = 0; i < 256; i++)
{
ape[i].peRed = (BYTE) (((i >> 5) & 0x07) * 255 / 7);
ape[i].peGreen = (BYTE) (((i >> 2) & 0x07) * 255 / 7);
ape[i].peBlue = (BYTE) (((i >> 0) & 0x03) * 255 / 3);
ape[i].peFlags = (BYTE) 0;
}
//

// Get a pointer to the bitmap resource.

//

if (szBitmap && (h = FindResource(NULL, szBitmap, RT_BITMAP)))
{
lpbi = (LPBITMAPINFOHEADER) LockResource(LoadResource(NULL, h));
if (!lpbi)
OutputDebugString("lock resource failed\n");
prgb = (RGBQUAD *) ((BYTE *) lpbi + lpbi->biSize);
if (lpbi == NULL || lpbi->biSize < sizeof(BITMAPINFOHEADER))
n = 0;
else if (lpbi->biBitCount > 8)
n = 0;
else if (lpbi->biClrUsed == 0)
n = 1 << lpbi->biBitCount;
else
n = lpbi->biClrUsed;
//

// A DIB color table has its colors stored BGR not RGB

// so flip them around.

//

for (i = 0; i < n; i++)
{
ape[i].peRed = prgb[i].rgbRed;
ape[i].peGreen = prgb[i].rgbGreen;
ape[i].peBlue = prgb[i].rgbBlue;
ape[i].peFlags = 0;
}
}
else if (szBitmap && (fh = _lopen(szBitmap, OF_READ)) != -1)
{
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;

_lread(fh, &bf, sizeof(bf));
_lread(fh, &bi, sizeof(bi));
_lread(fh, ape, sizeof(ape));
_lclose(fh);
if (bi.biSize != sizeof(BITMAPINFOHEADER))
n = 0;
else if (bi.biBitCount > 8)
n = 0;
else if (bi.biClrUsed == 0)
n = 1 << bi.biBitCount;
else
n = bi.biClrUsed;
//

// A DIB color table has its colors stored BGR not RGB

// so flip them around.

//

for (i = 0; i < n; i++)
{
BYTE r = ape[i].peRed;

ape[i].peRed = ape[i].peBlue;
ape[i].peBlue = r;
}
}
pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal, NULL);
return ddpal;
}

//-----------------------------------------------------------------------------

// Name: DDColorMatch()

// Desc: Convert a RGB color to a pysical color.

// We do this by leting GDI SetPixel() do the color matching

// then we lock the memory and see what it got mapped to.

//-----------------------------------------------------------------------------

extern "C" DWORD
DDColorMatch(IDirectDrawSurface7* pdds, COLORREF rgb)
{
COLORREF rgbT;
HDC hdc;
DWORD dw = CLR_INVALID;
DDSURFACEDESC2 ddsd;
HRESULT hres;

//

// Use GDI SetPixel to color match for us

//

if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
{
rgbT = GetPixel(hdc, 0, 0); // Save current pixel value

SetPixel(hdc, 0, 0, rgb); // Set our value

pdds->ReleaseDC(hdc);
}
//

// Now lock the surface so we can read back the converted color

//

ddsd.dwSize = sizeof(ddsd);
while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
;
if (hres == DD_OK)
{
dw = *(DWORD *) ddsd.lpSurface; // Get DWORD

if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1; // Mask it to bpp

pdds->Unlock(NULL);
}
//

// Now put the color that was there back.

//

if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
{
SetPixel(hdc, 0, 0, rgbT);
pdds->ReleaseDC(hdc);
}
return dw;
}

//-----------------------------------------------------------------------------

// Name: DDSetColorKey()

// Desc: Set a color key for a surface, given a RGB.

// If you pass CLR_INVALID as the color key, the pixel

// in the upper-left corner will be used.

//-----------------------------------------------------------------------------

extern "C" HRESULT
DDSetColorKey(IDirectDrawSurface7* pdds, COLORREF rgb)
{
DDCOLORKEY ddck;

ddck.dwColorSpaceLowValue = DDColorMatch(pdds, rgb);
ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue;
return pdds->SetColorKey(DDCKEY_SRCBLT, &ddck);
}
//--------------------------------------------------------------




3) resource.h


  
#define IDI_MAIN_ICON 101
#define IDR_MENU 102
#define IDM_EXIT 40001



that's all the code, and a lot too. i'm not really sure whats wrong with it. all i know is that it compiles and links fine, but crashes while running.

[edited by - oni_viper on July 25, 2002 2:00:02 AM]

Share this post


Link to post
Share on other sites
At first glance, whenever you call DDReLoadBitmap() you ask it to open "BACK", since your resource file has no mention of a "BACK" identifier I''m guessing you dont have an image whose filename is "BACK" in the program''s directory.

Also, next time you dont have to show ALL of your code. Preferably you should only the function that is giving you problems.



I will not make a list of links... I will not make a list of links... I will not make a list of links...
Invader''s Realm

Share this post


Link to post
Share on other sites
To use the image, pass the file name to DDLoadBitmap() which will load the bitmap for you to an offscreen surface. DDReLoadBitmap() copies the bitmap to a surface you specify.



I will not make a list of links... I will not make a list of links... I will not make a list of links...
Invader''s Realm

Share this post


Link to post
Share on other sites
well, it''s loading the file fine. but when it tries to load it into the back buffer, that''s when it crashes. i think it''s an error the programmer made. i don''t think g_pDDSBack is ever changed from NULL, so it''s always returning an error.

Share this post


Link to post
Share on other sites
here''s where the error is returned, the function is in ddutil.cpp


  
// Load a bitmap into the back buffer.

hRet = DDReLoadBitmap(g_pDDSBack, szBackground);
if (hRet != DD_OK)
return InitFail(hWnd, hRet, "DDReLoadBitmap FAILED");

Share this post


Link to post
Share on other sites
Using the normally helpful DirectX Error Lookup Utility (comes with the SDK), I found the very unhelpful error message...

HRESULT: E_FAIL
Description: An undetermined error occurred


Helpful links:
How To Ask Questions The Smart Way | Google can help with your question | Search MSDN for help with standard C or Windows functions

Share this post


Link to post
Share on other sites
in the debug window i get this:

Loaded ''ntdll.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\kernel32.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\user32.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\gdi32.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\advapi32.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\rpcrt4.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\ddraw.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\msvcrt.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\dciman32.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\imm32.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\lpk.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\usp10.dll'', no matching symbolic information found.
Loaded ''C:\WINDOWS\SYSTEM32\nvdesk32.dll'', no matching symbolic information found.
handle is null
The thread 0x60C has exited with code 0 (0x0).
The program ''C:\Program Files\Microsoft Visual Studio\MyProjects\directx_ex2\Debug\directx_ex2.exe'' has exited with code 0 (0x0).

is that bad?

Share this post


Link to post
Share on other sites