[置顶] 龙书源码编译

dx龙书全名是《DX9游戏开发编程基础》,该书中的源代码没有工程,只有.h.cpp文件,这或许是作者故意为之,这样我们就可以随心所欲的移植到vc++6.0或vs2008等集成开发环境了,但是我在移植到vs2008的时候总是失败不停的报错,很是头疼,期间参考了csdn网友iuhsihsow的文章,在此表示感谢,写下这篇文章也希望初学者能少走一些弯路吧!下面我们以第二章的第一个示例初始化来说明编译过程:



1.创建一个win32项目,如果一开始不小心创建为控制台,则可以在项目属性的链接器,系统,子系统中修改为windows
[置顶] 龙书源码编译_第1张图片

许多新手在编程时经常遇到“无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”这样的错误,最近看了一些这方面的书籍,现将解决方案大概叙述一下:

连接程序在负责连接可执行程序时,选择相应的c/c++运行时启动函数。如果设定了/subsystem:windows连接程序开关,那么连接程序会试图寻找WinMain或wWinMain函数。如果连个函数都不存在,那么就会返回一个“一个未解决的外部符号”(无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用)

同样,如果设定了/subsystem:console连接程序开关,那么连接程序就会试图寻找main函数或者wmain函数,如果找不到这连个函数是,连接程序返回unresolved externel symbol错误信息。

变成新手容易犯的一个错误是,创建应用程序时选择了错误的应用程序类型。例如,开发人员创建了一个新的Win32应用程序项目,并给这个项目创建了一个入口函数main。在这种情况下,创建应用程序时,开发人员就会看到一个连接程序的错误信息。这是因为Win32应用程序项目设置了/subsystem:windows连接程序开关,但是却找不到相应的Winmain或者wWinmain函数。这是侯你可以有以下几种解决方案。

1 将main函数改为Winmain函数

2 将/subsystem:windows开关改为/subsytem:console

3全部删除/subsytem:windows开关,让连接程序根据源代码中实现的函数进行正确的操作。

更改/subsystem:windows的方法:

右键点击项目,选择属性,会看到如下的选项框,点击连接器->系统,在右侧会看到“子系统”选项,在这里可以选择相应的连接程序开关 

2.将所有的文件都copy到工程的文件目录下,右键点击头文件文件夹添加现有项然后选择copy的所有头文件,同理,添加源文件选择并添加cpp和其他资源


3.删除原有工程的含有main的文件(如果建立的是空项目,就不用删除了),如,test.cpp这样程序就会找到源代码中的mian入口了。然后忽略预编译头
[置顶] 龙书源码编译_第2张图片

4.设置dx库,头文件,dll的路径

[置顶] 龙书源码编译_第3张图片

5.链接库:需包含以下头文件
#include <d3dx9.h>
#include <d3d9.h>
#include <string>

[置顶] 龙书源码编译_第4张图片

或者
#pragma comment(lib,"d3d9.lib") 
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"winmm.lib")
很多人开始的时候并没有附加winmm.lib库或者在头文件中也没有书写#pragma comment(lib,"winmm.lib")语句,如果使用的vs2008就会出现以下的错误:无法解析的外部符号 __imp__timeGetTime@0,该符号在函数 "int __cdecl d3d::EnterMsgLoop(bool (__cdecl*)(float))" (?EnterMsgLoop@d3d@@YAHP6A_NM@Z@Z) 中被引用。因为在龙书源代码中包含了timeGetTime函数, 检取从WINDOWS开始已逝去的毫秒数,此函数比timeGetSystemTime 函数开销小。

6.编码

[置顶] 龙书源码编译_第5张图片

选择多字节字符集

7.将此工程作为一个模板,以后就可以通过添加响应的头文件和源文件以及资源文件就可以使用了。


你可能感兴趣的:(编程,dx游戏编程)