编译环境vs2017(win10),在实现3D游戏编程大师技巧第三章的代码时不出意料地出现了大量的编译问题,花了一天时间以及在网上查找了很多的资料,终于解决了,下面是我的解决方案(不一定适用于所有人):
1、首先win10的SDK里已经没有了<dmusici.h>和<dmusicf.h>,所以我在网上找了DirectX8 SDK下载下来(windows游戏编程大师技巧的源码当然也要下载下来,网上也有),然后添加到工程(直接复制到同一目录估计也可以):
Property -> Configuration Properties -> C/C++ -> Additional Include Directories
-> 添加文件夹
..\DX8_VcSDK(DX8的SDK文件夹)\include;
Property -> Configuration Properties -> Linker -> General -> Additional Library Directories
-> 添加目录
..\DX8_VcSDK\lib;
Property -> Configuration Properties -> Linker -> Input ->Additional Dependencies
-> 添加库文件
ddraw.lib
dinput.lib
dxguid.lib /*添加这个之后T3DCONSOLE2.CPP里面的 #define INITGUID 可以注释掉了*/
dsound.lib
WinMM.Lib /*这个库不是DX8SDK中的,是WIN10SDK中的,所以也无需将目录包含进来*/
dinput8.lib /*这个是最后才发现要加进来的,否则会报LNK2019错误,原因是函数 DirectInput8Create() 在 dinput.h 中只有声明,定义在 dinput8.h 中,是看到名字才联想到的,网上好像没有人有类似的错误,不明觉厉*/
2、折磨人的 POINTER_64未定义:网上有各种解决方案,个人感觉修改<winnt.h>不太好(其实是无法修改hhh),然后直接暴力地在DX8SDK的<basetsd.h>的首行加入了
#define POINTER_64 __ptr64
(注意是两个下划线)
然后并不需要什么改头文件包含顺序,就解决了……惊了
反正这个库也是随便折腾的,无所谓了
3、t3dlib1.cpp、t3dlib2.cpp、t3dlib3.cpp 缺少”stdafx.h”,且直接加入 #include “stdafx.h” 会找不到:
Property -> Configuration Properties -> C/C++ -> Precompiled Headers -> Precompiled Header
修改为 Not Using Precompiled Headers
别报了
4、LPWAVEFORMATEX 未定义:t3dlib1.cpp、t3dlib2.cpp、t3dlib3.cpp 中添加 #define _CRT_SECURE_NO_WARNINGS
5、index 未定义:搬到外面定义,局部变量规范,历史遗留问题
改为:
int index;
..(index=0;..)..
…(原因太明显了不多写了)
查了很多资料,终于解决了,真是爽到