DirectX10+MSVC

最近在学 DirectX10,今天终于使用 MSVC (visual studio和visual c++使用的c/c++编译器) 成功编译了第一个示例程序。

先搞 DirectX:

查阅资料了解到,windows10其实是自带 DirectX12 ,但那只是运行时支持,而不是 DirectX SDK(软件开发工具包) 。所以需要自己下载 DirectX10。那就去 MSDN (算是微软官网)下载相关资源,得知 DirectX 的后续版本已经被整合到了 windows SDK 中,这个 SDK 占用空间很大,而且只能装在 C 盘。

幸好仍然提供旧版本的 DirectX SDK 下载,下载之后,安装在 E盘。

DirectX文档结构
最重要的就是 include 和 lib 文件,里面就是头文件和相应的库文件。

最初的打算是使用 MinGW 的 g++ 命令编译 DirectX10 程序,但是经过多次尝试还是以失败告终,总是会有莫名奇妙的错误。只能换成 MSVC 。又通过查资料得知可以单独下载编译器,而不需要安装完整的visual studio IDE(众所周知,Visual Studio动辄好几个G,十分臃肿,最关键的是其中的许多东西其实是用不到的)。

具体方法是下载 visual c++ build tools ,在安装时只选择编译器即可。注意:无法选择安装路径。默认装到C盘。安装完成后一看,c盘又小了一个G,肯定又是安装了很多不需要的东西。 (ーー゛)

visual c++ build tools 安装完成后在开始菜单栏就会出现相应的命令行界面,选择 Visual C++ 2015 x64 Native Command Prompt(其他的工具可自行尝试), 最关键的是 cl 命令,这就是编译命令。

cl /EHsc /Fea.exe InitDirect3D.cpp d3dApp.cpp d3dUtil.cpp GameTimer.cpp 

使用上述命令运行示例程序,此命令会将编译后的文件自动链接为exe文件

/EHsc 说明程序内部使用了异常处理,类似 Java 的 try catch 那种
 /Fe 重命名exe文件(默认是主函数所在程序名)

InitDirect3D.cpp 是程序入口,其余 cpp 文件是依赖文件。
使用预处理命令链接 lib 库,(此预处理命令 MinGW 是不支持的)

#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "dlib/d3d10.lib")
#pragma comment(lib, "dlib/d3dx10d.lib")

此示例程序使用了 Windows API,所以应包含有 windows.h 文件。

gdi32 user32 就是Windows API 的动态链接库,是 windows 自带的 dll 文件,d3d10 d3dx10d 是此程序使用到的静态链接库,我将它们从 DirectX 的 lib 文件夹拷贝到了项目的 dlib 文件夹中。

执行编译命令,一大堆报错。

首先是类型转换错误,比如:type ‘float’ unexcepted ,或者 cannot convert to … 等等;在网上找了一大堆资料,都没说到重点,有说把示例程序改成非 UNICODE 码的,还有说更改cpp文件保存时使用的字符集的。我在前两天刚看了 windows程序设计(第五版) 一书,再加上观察报错,认为这个错误是因为 UNICODE 的编码问题。也就是说函数参数要求非 UNICODE 码,但传入的是 UNICODE 码。

我想起在 windows 程序设计一书中作者这样写道: 如果程序中定义了名为 UNICODE 的宏,那么函数就处理 UNICODE 编码,如果没有定义,那就是非 UNICODE 码,比如 ASCII 码,或者扩展 ASCII 码。(实现此技术并不难,使用 #ifdef 对函数名进行条件宏替换就可以做到)

于是在include的头文件之前 定义了 UNICODE 宏,就像下面这样:

#ifndef D3DAPP_H
#define D3DAPP_H
#define UNICODE     //我自己加的,位于 d3dApp.cpp 文件中

#include "d3dUtil.h"
#include "GameTimer.h"
#include <string>

再次编译错误少了一大半,剩下的错误是找不到某些 DirectX10 的头文件。
再次经过相当长时间的折腾,发现 MSVC 的include文件夹在:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include

将头文件放入此文件夹即可。

注意: 编译信息提示缺什么再放什么,不要放多余的头文件,因为在

C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um

文件夹下还有系统自带的 DirectX 头文件(为什么这里也有,奇怪(ーー゛))。所以如果两个地方有相同的头文件,就会引发 “宏重定义” 错误。当然,也可以直接将需要的头文件拷贝到项目中,只需将 include<> 改为 include"" (#include< >指示预处理程序到预定义的缺省路径下寻找文件;#include“ ”指示预处理程序先到当前目录下寻找文件,再到预定义的缺省路径下寻找文件。)

做完这一切,再次运行 cl 命令,终于看到了 a.exe,运行得到结果:

哈哈哈
写在结尾: 其实到这就行了,但是我不想每次编译 cpp 文件都输入长长的 cl 命令,再次查询资料了解到了 makefile 技术,它可以实现自动编译,语法很简单,这就不写了,下面是我的 makefile:

Makefile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值