万分火急,这是怎么回事啊,unresolved external symbol _IID_IDirectDraw7

taxi 2004-12-18 09:37:05
做一人极简单的使用DirectDraw的程序,出现如下错误:
Linking...
Startup.obj : error LNK2001: unresolved external symbol _IID_IDirectDraw7
Debug/DDrawDemo.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

这是怎么回事,我已经将ddraw.lib加到工程的link中了,且在VC中已经将DirectX的lib和include目录加进去了。

我编译windows游戏编译大师技巧中的源代码却不会有这种错误。

以下是我的源代码,就一个文件:

#include <windows.h>
#include <ddraw.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int COLORS_PER_PIXEL = 8;
const char* CLASS_NAME= "DirectDraw";
const char* WINDOW_NAME = "Direct Draw Demo";

HWND gMainFormHandle;
LPDIRECTDRAW7 gDirectDraw;

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
int InitDDraw();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wndCls;
MSG msg;

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

if (!RegisterClassEx(&wndCls))
return 0;

gMainFormHandle = CreateWindowEx(0, CLASS_NAME, WINDOW_NAME,
WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,
0, 0, hInstance, NULL);
if (!gMainFormHandle)
return 0;

if (!InitDDraw())
return 0;

ShowWindow(gMainFormHandle, nCmdShow);
UpdateWindow(gMainFormHandle);

while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 1;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY: PostQuitMessage(0); return 0;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
}

int InitDDraw()
{
if (DirectDrawCreateEx(NULL, (void **)&gDirectDraw, IID_IDirectDraw7, NULL) != S_OK)
{
return 0;
}

return 1;
}
...全文
461 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2004-12-18
  • 打赏
  • 举报
回复
加入dxguid.lib文件
bobob 2004-12-18
  • 打赏
  • 举报
回复
那你就在WINDOWS游戏编程大师技巧的代码里面搜索一下这个结构的实现,复制过来也是一样能用的
taxi 2004-12-18
  • 打赏
  • 举报
回复
include和lib的第一项都是directx的,没问题的,而且我的版本是8.0
taxi 2004-12-18
  • 打赏
  • 举报
回复
但为什么WINDOWS游戏编程大师技巧的代码就可以编译通过和运行呢,
我查找了一个IID_IDirectDraw7,只在调用DirectDrawCreateEx时用到,
其它没有了。
bobob 2004-12-18
  • 打赏
  • 举报
回复
IID_IDirectDraw7没有这个id的定义,只有声明.
解决方法:把_i.c文件也包含进去,如果有的话.

如果没有:用vc自带的哪个工具找到IDirectDraw7这个注册的接口,查到其id值,自己构造一个id结构体.
Kudeet 2004-12-18
  • 打赏
  • 举报
回复
看是不是你的目录的顺序问题,它会按设置的目录顺序去查找,你把绝对路径设置到第一个位置试,或者是LIB的版本问题,到http://www.microsoft.com/directx下新的

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧