WINDOWS游戏编程大师技巧-常见编绎连接错误FAQ

1.无法从“const char [10]”转换为“LPCWSTR”

vs6,vs2005的版本问题
解决方案1:
winclass.lpszClassName = (LPCTSTR)WINDOW_CLASS_NAME;
解决方案2:
wndcls.lpszClassName = L"ShadowJack first window";

2.error LNK2019: 无法解析的外部符号 _DirectDrawCreateEx@16,该符号在函数 "int __cdecl

Game_Init(void *,int)" (?Game_Init@@YAHPAXH@Z) 中被引用

解决方案:
项目->属性->链接器->常规->附加库目录:
"E:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)/Lib/x86"
项目->属性->链接器->输入->附加依赖项:
ddraw.lib

E:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)/Include
E:/Program Files/Microsoft DirectX 9.0 SDK (February 2005)/Lib/x86

3.设置协同等级
// set cooperation to normal since this will be a windowed app
lpdd->SetCooperativeLevel(main_window_handle, DDSCL_NORMAL);

// set cooperation to full screen 设置一个全屏窗口
if (FAILED(lpdd->SetCooperativeLevel(main_window_handle,
                                      DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX |
                                      DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
   {
   // error
   return(0);
   } // end if

4.设置屏幕分辨率
// set display mode to 640x480x8
if (FAILED(lpdd->SetDisplayMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,0,0)))
   {
   // error
   return(0);
   } // end if

5.什么是光栅化
现实中的视觉图像是连续的,但是电子屏幕上的图像是一个个的点组成的,叫做像素,要把连续的图

像用离散的像素表示出来就是光栅化了。


6.fatal error C1083: 无法打开包括文件:“dsound.h”: No such file or directory
别忘记了编程时附带,在Project/Setting/Link/ 中加入 strmbasd.lib uuid.lib winmm.lib
将directX sdk下的include文件夹下的.h文件拷贝到VC的include文件夹下


7.error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7

好多初学者在用DX SDK写自己的应用时,都莫名其妙的发现如下几个类似的编译(更准确地说是链接

)错误:

FDraw.obj : error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7
FDraw.obj : error LNK2019: 无法解析的外部符号 _DirectDrawCreate@12 ,该符号在函数 “int

__cdecl DDInitialize(void)” (?DDInitialize@@YAHXZ) 中被引用
FInput.obj : error LNK2001: 无法解析的外部符号 _GUID_SysKeyboard
FInput.obj : error LNK2001: 无法解析的外部符号 _IID_IDirectInput8A
LIBCD.lib(wincrt0.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16 ,该符号在函数

_WinMainCRTStartup 中被引用
dinput8.lib(dilib1.obj) : error LNK2001: 无法解析的外部符号 _GUID_ZAxis
dinput8.lib(dilib1.obj) : error LNK2001: 无法解析的外部符号 _GUID_YAxis
dinput8.lib(dilib1.obj) : error LNK2001: 无法解析的外部符号 _GUID_XAxis
dinput8.lib(dilib2.obj) : error LNK2001: 无法解析的外部符号 _GUID_Key
Debug/sword.exe : fatal error LNK1120: 9 个无法解析的外部命令

而且这种问题是很奇怪的;不过其实并不很复杂。

首先,你大概知道,在使用DX SDK之前,应该在选项里面,把lib和include设置好,不过这并不代表

你的代码在编译的时候会自动应用*.lib(比如说ddraw.lib),你需要在你的DX封装的cpp对应的

header里加上类似的如下几句:

#pragma  once
#pragma  message("FDraw.h --> Linking with ddraw.lib")
#pragma  comment(lib,"ddraw.lib")这几行文字就相当于告诉编译器编译的时候把 ddraw.lib 也编

进去(链接, Link)。

试试看,加上相应的几句,是不是没有什么 error LNK2001 了?


ARPG error LNK2019: 无法解析的外部符号 _DirectDrawCreateEx@16 ,该符号在函数 "int

__cdecl Game_Init(void)" (?Game_Init@@YAHXZ) 中被引用

头文件加入 #pragma comment( lib, "Dxguid.lib")   

ARPG error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7

头文件加入#pragma comment( lib, "ddraw.lib")

VS2005,工具->选项->项目和解决方案->VC++目录。在“显示以下内容的目录”里选择:"库文件",

再添加“C:/Program Files/Microsoft DirectX SDK (August 2006)/Lib/x86”


8. Debug Assertion Failed!
File:f:/dd/vctools/crt_bld/self_x86/crt/src/lseek.c
Line:66
Expression:(fh >= 0 (unsigned)fh < (unsigned)_nhandle)

注释T3DLIB1.CPP 中的这一行
// finally the image data itself
_lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);

你可能感兴趣的:(WINDOW游戏编程大师技巧)