1. 主页 > vs安装问题 > VS2005安装问题 >

VS2005+DirectX 9平台配置出现的问题以及解决方案

    又被清华大学出版社给忽悠了,提供的光盘里写着不提供DirectX sdk下载,给了个链接让我自己去下,我看了下链接的DirectX sdk版本是dxsdk_jun2006.exe,于是就down了一个,这个版本是DirectX 9的版本,哪晓得down了后安装后发现英文书并不是用的这个版本,导致VC6根本和这个版本不兼容,换VC2005吧,DirectX 是没问题了,但由于英文原版的例子是用VC 6.0开发的,导致程序主体的问题很多.无奈啊.不过正好了解下平台移植的痛苦.

    还好英文版的书中,还是透漏了用的是哪个SDK,如下图,应该是DirectX 8.1的版本:

   

 


好了,先说说我用那破书提供的sdk_jun2006存在的问题:

  • 用VC6,和DirectX 9 SDK冲突
  • 用VC2005,和作者的源代码冲突

    先谈谈如何用VC2005+ DirectX 9 SDK的组合吧.这是我没有发现sdk版本不对时采取的做法.例子用/Chapter 3/Multiple NPCs

  • 用VS2005打开Multiple NPCs.dsw,VS会自动将VC6的工程转换为VS2005的.
  • 添加需要的库和头文件,要加的有库文件:C:/Program Files/Microsoft DirectX SDK (June 2006)/Lib/x86以及包含文件:C:/Program Files/Microsoft DirectX SDK (June 2006)/Include.加入后,把这两个移到最上.具体方法为:
/*
1. 添加编译所需要(依赖)的 lib 文件 
[解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 
(等同于“#pragma comment(lib, "winsock.lib") ”语句) 

2. 添加库(Libs)文件目录 
方法 1:[解决方案资源管理器]“项目->属性->配置属性->连接器->常规->附加库目录” 
方法 2:[菜单]“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加所需“库文件”目录 

3. 添加包含(include)文件目录 
方法 1:[解决方案资源管理器]“项目->属性->配置属性->C/C++->常规->附加包含目录” 
方法 2:[菜单]“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加所需“包括文件”目录 
*/
  • 可以编译下看看了,果然出现了错误:fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory e:/iso/gamescript/programs/chapter 3/multiple npcsvs2005/multiple npcs/source/wrappuh.h 30 . VS中改用iostream,所以需要修改为  #include <iostream>
  • 再编译,又出现一个错误:错误 13 error C2065: 'iCurrNPCIndex' : undeclared identifier e:/iso/gamescript/programs/chapter 3/multiple npcsvs2005/multiple npcs/source/multi_npc.cpp 656 看代码:
//Multi_NPC.cpp 603行

        for ( int iCurrNPCIndex = 0; iCurrNPCIndex < MAX_NPC_COUNT; ++ iCurrNPCIndex )

        {

            ....

        }



//Multi_NPC.cpp 656行  这行iCurrNPCIndex 提示没有定义,可以看出在VS2005里,for循环初始化变量的作用域范围和VC6.0不同

                for ( iCurrNPCIndex = 0; iCurrNPCIndex < MAX_NPC_COUNT; ++ iCurrNPCIndex )



  • 修改了几个类似的错误,再编译,出现了链接错误:错误 16 fatal error LNK1104: 无法打开文件“../../../../../../program files/microsoft visual studio/vc98/lib/WINMM.LIB” Multiple NPCs  "解决方案资源管理器"里有个Libraries目录,里面存放了需要的lib文件,双击WINMM.LIB,提示无法打开文件,看来是这个文件路径错了.用记事本打开Multiple NPCs.vcproj,里面有这么一段可以看出是原来项目的库路径出现了问题. 在"解决方案资源管理器"里把这几个库文件全删掉,然后按照上面"1. 添加编译所需要(依赖)的 lib 文件 "的方法把他们都加进去.

 

		<Filter

			Name="Libraries"

			>

			<File

				RelativePath="../../../../../../DXSDK81/lib/ddraw.lib"

				>

			</File>

			<File

				RelativePath="../../../../../../DXSDK81/lib/dinput8.lib"

				>

			</File>

			<File

				RelativePath="../../../../../../DXSDK81/lib/dsound.lib"

				>

			</File>

			<File

				RelativePath="../../../../../../DXSDK81/lib/dxguid.lib"

				>

			</File>

			<File

				RelativePath="../../../../../../Program Files/Microsoft Visual Studio/VC98/Lib/WINMM.LIB"

				>

			</File>

		</Filter>
  • 具体的图片如下:还需要改的是,_lseek这个bug,详见Direct9+VS2005 读取bmp位图时,_lseek()函数断言报错分析

  • ok编译正常了.

 


 

    使用VC6+DirectX 8就简单很多,因为作者写代码就是用的这套环境.不过还是需要做点变动:

  • 去除掉WorkSpace里Libraies里的几个库,把它们加在[Project]->[Settings]->[Link]->[Object/library modules]下的编辑框里.
  • [Tools]->[Options]里加入DirectX 8的"包含文件目录"和"库文件目录"我机器上是D:/DXSDK81/INCLUDE和D:/DXSDK81/LIB

本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2005anzhuangwenti/2020/0721/819.html

联系我们

在线咨询:点击这里给我发消息

微信号:PREEE8

工作日:9:30-18:30,节假日休息