【Visual C++】游戏开发笔记三十二 浅墨DirectX提高班之一 DirectX大局观认知篇

  这篇文章作为DirectX系列知识的一个认知篇,希望大家看过之后,能对你印象中的DirectX有一个新的认识,学到新的东西。

 

这篇文章我们将分为五个部分来进行讲解,且最后提供了配套源代码的下载,这五部分是:

一、引言

二、DirectX的两种不同含义

三、DirectX的几套开发方案

四、Direct3D的体系结构

五,Win32应用程序的框架源代码欣赏

 

在一开头,跟大家先讲讲题外话。

用通俗易懂而亲切幽默的语言,描绘出晦涩难懂的编程知识,这是浅墨目前对自己的游戏开发笔记系列专栏的定位。

而新的子栏目名称,浅墨DirectX提高班,这个名字是来自著名dota解说2009的dota解说视频名称——《09dota提高班》。浅墨也是一名dota爱好者,平常也喜欢看看dota视频来提高dota技术,09的视频我是经常看的,所以浅墨DirectX提高班这个名称应运而生。

 

好了,现在就开始第一部分吧。

 

 

一、引言

 

DirectX,这个看起来酷酷的家伙,这个微软的亲儿子,自从这个世纪之交以来,一直是Windows平台下所有游戏开发的首选SDK。统观百度今日网络游戏排行榜,全是C++与DirectX搭档,在游戏引擎的配合下制作出的游戏作品:

 

 

这些游戏包括耳熟能详的《穿越火线》《地下城与勇士》《英雄联盟》(前三名竟然都是腾讯代理的。。。。。。。。。。)《魔兽世界》《梦幻西游》《qq飞车》《龙之谷》《qq炫舞》《武魂》《传奇》《剑网3》《反恐精英ol》等等,下面我们贴出一些宣传图

 

C++与DirectX 游戏作品之《CS online》:

 

C++与DirectX游戏作品之《魔兽世界》,WOW:

 

C++与DirectX游戏作品之《地下城与勇士》,DNF,大家俗称的毒奶粉- -:

 

C++与DirectX游戏作品之《英雄联盟》LOL(大家俗称的撸啊撸- -)

 

 

最后贴一张浅墨非常期待的动作游戏大作《鬼泣5》的主角但丁的帅气图:

 

好了,美图看完了。

 

从本节笔记开始,我们就来一步一步揭开DirectX游戏开发的神秘面纱,看看这个目前统治PC游戏界的图形API,到底能给我们哪些惊喜。

 

下面就来进入正题。

 

 

 

 

二、DirectX的两种不同含义

 

 

通常说的DirectX其实有两种不同的含义,一是指DirectX SDK(我们一般叫它DirectX开发包)或称DirectX API(DirectX应用程序可编程接口),用于开发高性能多媒体程序的应用程序接口;二是指DirectX Runtime(DirectX运行时),也就是一组动态链接库,是运行我们利用DirectX SDK开发出来的应用程序必须的运行环境。比如我们现在刚下载并安装好valve公司的游戏大作《Dota2》,想要来体验一番,我们兴奋地双击dota2的图标,本以为一切顺利,可以马上开始我们的dota2超神之旅,这时候却弹出了一个恼人的系统错误窗口,告诉我们说缺失某某D3D的DLL,要你重新安装该运用程序解决此问题,如图

 

 

 

其实并不是这个游戏程序安装错误,而是我们的DirectX Runtime(DirectX运行时)没有在我们的电脑上安装好,这时候,去网上下一个最新版的DirectX runtime就可以顺利进入游戏,开始我们的dota超神之旅了。

 

对于游戏玩家,他们只需要能顺利运行游戏就万事大吉了,显然他们对DirectX的印象停留在DirectX Runtime(DirectX运行时)就完全够用了。

对于游戏开发者,一般我们指的DirectX就是DirectX SDK。DirectX SDK作为开发包,里面关于DirectX开发相关的工具与资源应有尽有,显然就包括了上面的DirectX Runtime。我们后面提到的DirectX,一般都指的是DirectX SDK。

 

 

 

 

三、DirectX的几套开发方案

 

 

我们已经知道DirectX是一套应用程序开发接口,但是DirectX不同于它的死对头OpenGL直接提供函数的接口。在早期的版本中,DirectX SDK是以COM接口的方式提供给开发者的,把功能相似的函数封装在一个COM接口中。随着微软.NET战略的实施,从DirectX 9.0开始,除了COM接口的方式,DirectX开发接口还可以以.NET类库的形式提供给我们。所以,目前DirectX开发游戏或者三维图形程序时就有了两种选择:

1.采用COM接口的方式。

2.采用.NET类库的方式。

先来讲讲DirectX的第一套开发方案,也就是采用COM接口。COM接口与C、C++甚至Visual Basic编程语言都是可以擦出火花的。尤其是C++,与COM接口配合使用有非常高的契合度,显然C++/COM接口搭档是目前使用最广泛的DirectX开发方式。

对于第二种开发方案,DirectX配合.NET类库的方式,可以配合C#、Mannaged C++等编程语言进行开发。尤其是C#与.NET配合DirectX,这样可以充分发挥.NET类库提供的强大功能,例如数据库的开发、底层通信功能的支持等等。对于开发一些性能要求不高的游戏或者三维图形程序时,C#与.NET配合DirectX可能比C++与COM接口配DirectX来得更合适。

 

但是对于大型游戏开发,执行效率永远都是要放在第一位的。一谈到执行效率,这可是C/C++的长处。所以,在高性能游戏的开发领域,C/C++就显得比任何编程语言都要高贵与雍容。

所以,毋庸多言,C++与COM接口配DirectX,是目前99%大型游戏采用的开发方案,也是我们主要讲解的方向。

 

 

 

 

四、Direct3D的体系结构

 

 

Direct3D作为DirectX的绝对主力,是微软与OpenGL在3D图形领域抗衡的正面武器。每次DirectX升级之时,微软都会单独针对Direct3D这款API进行大量更新,使其拥有更强大的功能,更完善的使用体验。因为Direct3D主攻3D图形与3D游戏,可谓DirectX中撑场面的API,自然我们在后续讲解中要将更多的重心放在它之上。

 

下面我们就来迈出介绍Direct3D的第一步,讲解Direct3D程序开发和运行密切相关的一些知识。

 

先来看一张结构图,这是Direct3D,GDI/GDI+与应用程序,显卡之间交互关系的一张简明扼要的结构图:

 

 

 

 

1.关于结构图的解释

 

如图,Win32应用程序可以使用Direct3D以及GDI/GDI+两套图形库完成与显卡的交互。当然,能与显卡交互的方式不只有这两种,方法多得是,这里我们只需要暂时知道有这两种就可以了。我们可以看到,与Direct3D和GDI/GDI+处于同一层次,也就是说,Direct3D和GDI/GDI+都可以通过图形设备驱动程序接口(DDI)访问图形硬件,也就是显卡。但不同于GDI/GDI+这对“屌丝”设备的是,“高富帅”Direct3D可是有一个牛逼闪闪的“后台”的,那就是硬件抽象层(HAL)。Direct3D可以使用硬件抽象层(HAL)通过图形设备驱动程序接口(DDI)来访问显卡,从而可以充分地发挥显卡的潜在性能,绘制出高性能高质量的精美图形来。如果我们的显卡支持Direct3D的话,HAL就存在于我们的计算机中,而需要运行DirectX 9.0开发的应用程序的话,我们的显卡驱动程序需要至少支持DirectX 7.0版本以上的DDI才可以,不过在如今支持DirectX 11显卡烂大街的时代,这显然不会是什么问题。

 

2.关于硬件抽象层 HAL

 

大多数基于Direcr3D API设计开发的三维图形程序都运行于硬件抽象层(Hardware Abstraction Layer),也就是HAL之上。使用HAL的好处,是既能充分利用系统硬件的加速功能,又隐藏了硬件相关的设备特性。这就是说,Direct3D利用HAL实现了设备无关的特性,通过Direct3D可以编写出与设备无关的高效代码。硬件抽象层是由硬件制造商提供的特定于硬件的接口,Direct3D利用该接口实现了对显示硬件的直接访问。所以,应用程序永远不需要访问HAL,直接与Direct3D API打交道就可以了。HAL可以是显卡的一部分,也可以是和显卡驱动程序相互关联的单独动态链接库(DLL)。

HAL仅仅是与设备相关的代码,对于硬件不支持的功能,它并不提供软件模拟。在DirectX 9.0中,针对同一种显示设备,HAL提供3种顶点处理模式:软件顶点处理、硬件顶点处理和混合顶点处理。还有,纯硬件设备是HAL的变体,纯硬件设备类型仅支持硬件顶点处理。

 

3.关于参考光栅设备REF

 

万事还是有个特殊的,是吧。有时候,Direct3D提供的某些功能不被我们的显卡支持,但是我们偏偏想去使用这些功能的话,就可以使用一下Direct3D的辅助设备,也就是参考光栅设备(Reference Rasterizer Device,REF)。这种REF设备可以以软件运算的方式完全支持Direct3D API。借助REF设备,我们可以在代码中使用那些不为当前硬件所支持的特性,并对这些特征进行测试。

 

 

 

五,Win32应用程序的框架源代码欣赏

 

 

扯了那么多空话,无非能使大家对DirectX有些更深刻的认识,不过落到实处,还是需要在敲代码上下功夫。俗话说,千里之堤,溃于蚁穴,为了后面更好地演示与学习我们关于DirectX的各项功能,首先需要有一个很好的Win32应用程序框架。

这是浅墨敲出来的一个详细注释的Win32应用程序的源代码,文章稍后会把详细注释的源代码贴出来,先给大家看一个大概的框架一览:

 

 

为了演示DirectX各项功能的方便性,与代码的易读性,目前我们并没有以类为载体。我们的想法是,当后面需要构建功能复杂的程序的时候,再转向面向对象的思想。我们之后学习的关于Direct3D的编程,简单点说,只需

1.在Direct3D_Init(HWND hwnd )函数里完成Direct3D的相关初始化

2.在 Direct3D_Render( )函数里完成渲染。

3.Direct3D_CleanUp( )函数里完成资源的清理。

这三步就可以了。

 

 

下面我们就来贴出详细注释的源代码:

 

  1. //*****************************************************************************************  
  2. //  
  3. //【Visual C++】游戏开发笔记系列配套源码 三十二 浅墨DirectX提高班 之 Win32窗口的创建  
  4. //      Note_Code_32  
  5. //       VS2010版  
  6. // 2012年 11月07日  Create by 浅墨   
  7. //图标素材: 古剑奇谭 风雪晴  
  8. //此刻心情:多年以后,当你回忆往昔,唯一让你觉得真实,和骄傲的,是你现在昂首挺胸、用力走过的人生。  
  9. //  
  10. //*****************************************************************************************   
  11.   
  12.   
  13.   
  14.   
  15. //*****************************************************************************************  
  16. // Desc: 头文件定义部分    
  17. //*****************************************************************************************                                                                                         
  18. #include <d3d9.h>  
  19.   
  20.   
  21.   
  22. //*****************************************************************************************  
  23. // Desc: 宏定义部分     
  24. //*****************************************************************************************  
  25. #define SCREEN_WIDTH    800                         //为窗口宽度定义的宏,以方便在此处修改窗口宽度  
  26. #define SCREEN_LEIGHT   600                         //为窗口高度定义的宏,以方便在此处修改窗口高度  
  27. #define WINDOW_TITLE    L"【Visual C++游戏开发笔记】博文配套demo之三十二 浅墨DirectX提高班 之 Win32窗口的创建" //为窗口标题定义的宏  
  28. #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //定义一个安全释放宏,便于后面COM接口指针的释放  
  29.   
  30.   
  31.   
  32. //*****************************************************************************************  
  33. // Desc: 全局变量声明部分    
  34. //  
  35. //*****************************************************************************************  
  36.   
  37.   
  38.   
  39. //*****************************************************************************************  
  40. // Desc: 全局函数声明部分   
  41. //  
  42. //*****************************************************************************************   
  43. LRESULT CALLBACK    WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );  
  44. HRESULT             Direct3D_Init(HWND hwnd);  
  45. void                Direct3D_Render( );  
  46. void                Direct3D_CleanUp( );  
  47.   
  48.   
  49.   
  50. //*****************************************************************************************  
  51. // Name: WinMain( )  
  52. // Desc: Windows应用程序入口函数  
  53. //*****************************************************************************************  
  54. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)  
  55. {  
  56.   
  57.     //开始设计一个完整的窗口类  
  58.     WNDCLASSEX wndClass = { 0 };                //用WINDCLASSEX定义了一个窗口类  
  59.     wndClass.cbSize = sizeof( WNDCLASSEX ) ;    //设置结构体的字节数大小  
  60.     wndClass.style = CS_HREDRAW | CS_VREDRAW;   //设置窗口的样式  
  61.     wndClass.lpfnWndProc = WndProc;             //设置指向窗口过程函数的指针  
  62.     wndClass.cbClsExtra     = 0;  
  63.     wndClass.cbWndExtra     = 0;  
  64.     wndClass.hInstance = hInstance;             //指定包含窗口过程的程序的实例句柄。  
  65.     wndClass.hIcon=(HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //本地加载自定义ico图标  
  66.     wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //指定窗口类的光标句柄。  
  67.     wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //为hbrBackground成员指定一个灰色画刷句柄      
  68.     wndClass.lpszMenuName = NULL;                       //用一个以空终止的字符串,指定菜单资源的名字。  
  69.     wndClass.lpszClassName = L"ForTheDreamOfGameDevelop";       //用一个以空终止的字符串,指定窗口类的名字。  
  70.   
  71.     if( !RegisterClassEx( &wndClass ) )             //设计完窗口后,需要对窗口类进行注册,这样才能创建该类型的窗口  
  72.         return -1;        
  73.   
  74.     HWND hwnd = CreateWindow( L"ForTheDreamOfGameDevelop",WINDOW_TITLE,         //喜闻乐见的创建窗口函数CreateWindow  
  75.         WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, SCREEN_WIDTH,  
  76.         SCREEN_LEIGHT, NULL, NULL, hInstance, NULL );  
  77.   
  78.           
  79.     MoveWindow(hwnd,250,80,SCREEN_WIDTH,SCREEN_LEIGHT,true);   //调整窗口显示时的位置,使窗口左上角位于(250,80)处  
  80.     ShowWindow( hwnd, nShowCmd );    //调用Win32函数ShowWindow来显示窗口  
  81.     UpdateWindow(hwnd);  //对窗口进行更新,就像我们买了新房子要装修一样  
  82.   
  83.     //Direct3D资源的初始化  
  84.     Direct3D_Init (hwnd);  
  85.     MessageBox(hwnd, L"DirectX,等着瞧吧,老夫随浅墨来降服你了~!", L"浅墨的消息窗口", 0); //使用MessageBox函数,创建一个消息窗口  
  86.     //消息循环过程  
  87.     MSG msg = { 0 };  //初始化msg  
  88.     while( msg.message != WM_QUIT )         //使用while循环  
  89.     {  
  90.         if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //查看应用程序消息队列,有消息时将队列中的消息派发出去。  
  91.         {  
  92.             TranslateMessage( &msg );       //将虚拟键消息转换为字符消息  
  93.             DispatchMessage( &msg );        //该函数分发一个消息给窗口程序。  
  94.         }  
  95.         else  
  96.         {  
  97.             Direct3D_Render();   //进行渲染  
  98.         }  
  99.     }  
  100.   
  101.     UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance);  //程序准备结束,注销窗口类  
  102.     return 0;    
  103. }  
  104.   
  105.   
  106.   
  107. //*****************************************************************************************  
  108. // Name: WndProc()  
  109. // Desc: 窗口过程函数WndProc,对窗口消息进行处理  
  110. //*****************************************************************************************  
  111. LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )        
  112. {  
  113.     switch( message )               //switch语句开始  
  114.     {  
  115.     case WM_PAINT:                   // 客户区重绘消息  
  116.         Direct3D_Render();          //调用Direct3D_Render函数,进行画面的绘制  
  117.         ValidateRect(hwnd, NULL);   // 更新客户区的显示  
  118.         break;                                  //跳出该switch语句  
  119.   
  120.     case WM_KEYDOWN:                // 键盘按下消息  
  121.         if (wParam == VK_ESCAPE)    // ESC键  
  122.             DestroyWindow(hwnd);    // 销毁窗口, 并发送一条WM_DESTROY消息  
  123.         break;  
  124.     case WM_DESTROY:                //窗口销毁消息  
  125.         Direct3D_CleanUp();     //调用Direct3D_CleanUp函数,清理Direct3D  
  126.         PostQuitMessage( 0 );       //向系统表明有个线程有终止请求。用来响应WM_DESTROY消息  
  127.         break;                      //跳出该switch语句  
  128.   
  129.     default:                        //若上述case条件都不符合,则执行该default语句  
  130.         return DefWindowProc( hwnd, message, wParam, lParam );      //调用缺省的窗口过程  
  131.     }  
  132.   
  133.     return 0;                   //正常退出  
  134. }  
  135.   
  136.   
  137. //*****************************************************************************************  
  138. // Name: Direct3D_Init( )  
  139. // Desc: 初始化Direct3D  
  140. //*****************************************************************************************  
  141.   
  142. HRESULT Direct3D_Init(HWND hwnd)  
  143. {  
  144.     return S_OK;  
  145. }  
  146.   
  147.   
  148.   
  149. //*****************************************************************************************  
  150. // Name: Direct3D_Render()  
  151. // Desc: 使用Direct3D进行渲染  
  152. //*****************************************************************************************  
  153. void Direct3D_Render()  
  154. {  
  155.      //暂时为空,且听浅墨下回分解  
  156. }  
  157.   
  158.   
  159. //*****************************************************************************************  
  160. // Name: Direct3D_CleanUp()  
  161. // Desc: 对Direct3D的资源进行清理  
  162. //*****************************************************************************************  
  163. void Direct3D_CleanUp()  
  164. {  
  165.     //暂时为空,且听浅墨下回分解  
  166. }  

 

最终,程序运行结果如下:

 

 

 

其中图标素材使用的是新生代国产武侠单机游戏《古剑奇谭》中的风雪晴

 

浅墨在窗口初始化完成后,用MessageBox函数写了一条:

 

  1. MessageBox(hwnd, L"DirectX,等着瞧吧,老夫随浅墨来降服你了~!", L"浅墨的消息窗口", 0); //使用MessageBox函数,创建一个消息窗口  

这样就可以弹出如下对话框了:

  

后面在初始化Direct3D阶段,如果某项初始化失败,我们就可以用Message语句弹出消息框,提示哪项内容初始化失败了。

 

关于Win32方面的知识前面相关文章里已经讲了很多了,相信大家都已经耳濡目染,而且浅墨对上面的代码进行了非常详细的注释,所以这里就不再赘述。Direct3D方面的基础知识和相关的一些周边知识是非常多非常杂的,后面会渐渐都跟大家涉及到。

 

下面放出本节笔记配套源代码的下载地址。

 

本节笔记配套源代码请点击这里下载:

 

【浅墨DirectX提高班】配套源码之一

 

 

以上就是本节笔记的全部内容,更多精彩内容,且听下回分解。

浅墨在这里,希望喜欢游戏开发系列文章的朋友们能留下你们的评论,每次浅墨登陆博客看到大家的留言的时候都会非常开心,感觉自己正在传递一种信仰,一种精神。

 

另外,浅墨刚刚参加了2012年CSDN年度博客之星的评选活动。
在这里,恳请支持浅墨,喜欢游戏开发系列文章的朋友们去
投浅墨一票,有了大家的支持,浅墨会更用心地写出更优秀的博客文章来与大家分享,把技术分享这种信仰传递下去。

大家的支持就是浅墨继续写下去的动力~~~

 

如果文章中有什么疏漏的地方,也请大家指正。也希望大家可以多留言来和我探讨编程相关的问题。

 

 

 

文章最后,送给大家一句话,以此共勉:

其实所有漂泊的人,不过是为了有一天能够不再漂泊,能用自己的力量撑起身后的家人和自己爱的人。

希望现在正在电脑前看浅墨文章的朋友们都能与浅墨一起努力,早日让自己变得强大,能不再漂泊,能有力量去守护身后的家人,和自己爱的人。

 

 

下周一,游戏开发笔记,我们,不见不散。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectX redist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。 本程序为了应对一般电脑用户的使用,采用了傻瓜式一键设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校验、检测、下载、修复以及注册的全部功能,无需用户的介入,大大降低了使用难度。 本程序适用于多个操作系统,如Windows XP(需先安装.NET 2.0,详情请参阅“致Windows XP用户.txt”文件)、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 8.1 Update、Windows 10,同时兼容32位操作系统和64位操作系统。本程序会根据系统的不同,自动调整任务模式,无需用户进行设置。 本程序的V3.7版分为标准版、增强版以及在线修复版。标准版支持修复DirectX的功能,而增强版则支持同时修复DirectXc++的功能。在线修复版与标准版相同,默认只支持修复DirectX,但其所需的数据包需要在修复时自动下载。各个版本之间,主程序完全相同,只是其配套使用的数据包不同。因此,标准版和在线修复版可以通过补全扩展包的形式成为增强版。本程序自V3.5版起,自带扩展功能。只要在主界面的“工具”菜单下打开“选项”对话框,找到“扩展”标签,点击其中的“开始扩展”按钮即可。扩展过程需要Internet连接,扩展成功后重新运行程序即可使新的数据包生效。扩展用时根据网络速度不同而不同,最快仅需数秒,最慢需要数分钟,烦请耐心等待。 本程序自V2.0版起采用全新的底层程序架构,使用了异步多线程编程技术,使得检测、下载、修复单独进行,互不干扰,快速如飞。新程序更改了自我校验方式,因此使用新版本的程序时不会再出现自我校验失败的错误;但并非取消自我校验,因此程序安全性与之前版本相同,并未降低。 程序有自动更新c++功能。由于绝大多数软件运行时需要c++的支持,并且c++的异常也会导致0xc000007b错误,因此程序在检测修复的同时,也会根据需要更新系统中的c++组件。自V3.2版本开始使用了全新的c++扩展包,可以大幅提高工业软件修复成功的概率。修复c++的功能仅限于增强版,标准版及在线修复版在系统c++异常时(非丢失时)会提示用户使用增强版进行修复。除常规修复外,新版程序还支持C++强力修复功能。当常规修复无效时,可以到本程序的选项界面内开启强力修复功能,可大幅提高修复成功率。请注意,此功能为试验性功能,请仅在常规修复无效时再使用。 程序有两种窗口样式。正常模式即默认样式,适合绝大多数用户使用。另有一种简约模式,此时窗口将只显示最基本的内容,修复会自动进行,修复完成10秒钟后会自动退出。该窗口样式可以使修复工作变得更加简单快速,同时方便其他软件、游戏将本程序内嵌,即可进行无需人工参与的快速修复。开启简约模式的方法是:打开程序所在目录下的“Settings.ini”文件(如果没有可以自己创建),将其中的“FormStyle”一项的值改为“Simple”并保存即可。 新版程序支持命令行运行模式。在命令行中调用本程序,可以在路径后直接添加命令进行相应的设置。常见的命令有5类,分别是设置语言的命令、设置窗口模式的命令,设置安全级别的命令、开启强力修复的命令、显示版权信息的命令。具体命令名称可以通过“/help”或“/?”进行查询。 程序有高级筛选功能,开启该功能后用户可以自主选择要修复的文件,避免了其他不必要的修复工作。同时,也支持通过文件进行辅助筛选,只要在程序目录下建立“Filter.dat”文件,其中的每一行写一个需要修复文件的序号即可。该功能仅针对高级用户使用,并且必须在正常窗口模式下才有效(简约模式时无效)。 本程序有自动记录日志功能,可以记录每一次检测修复结果,方便在出现问题时,及时分析和查找原因,以便找到解决办法。 程序的“选项”对话框中包含了6项高级功能。点击其中的“注册系统文件夹中所有dll文件”按钮可以自动注册系统文件夹下的所有dll文件。该项功能不仅能修复DirectX的问题,还可以修复系统中很多其他由于dll未注册而产生的问题,颇为实用。点击该按钮旁边的小箭头,还可以注册任意指定文件夹下的dll文件,方便用户对绿色版、硬盘版的程序组件进行注册。点击第二个按钮可以为dll文件的右键菜单添加“注册”和“卸载”项,方便对单独的dll文件进行注册。请注意,并不是所有的dll文件都可以通过这种方式注册。点击“扩展”选项卡可以将任意版本的程序扩展成增强版。点击“DirectX版本”选项卡,可以自行修改系统中DirectX的版本信息。点击“DirectX加速”选项卡可以控制系统中DirectX加速的开启与关闭。点击“实验室”选项卡可以开启实验功能:C++强力修复功能,通过全新的代码设计,彻底改善对于顽固异常文件的处理,极大提高修复成功率。API Sets强力修复功能,参照了DirectX文件的精细修复方式,极大地改善了修复失败的情况。修复失败时启用错误调试功能,针对之前版本出现的所有文件均修复失败的问题专门研发,可以在出现问题时分析错误原因。 新版程序集成了用户反馈程序,可以在用户允许的前提下发送检测修复结果。用户也可以在出现问题时通过反馈程序和软件作者进行交流,共同查找问题。反馈是完全自愿和匿名(如果不填写E-mail地址)的。 本程序的通用版基于Microsoft .NET Framework 2.0开发,对于Windows 2000、Windows XP、Windows 2003的用户需要首先安装.NET Framework 2.0或更高版本方可运行本程序。有关下载和安装的详细信息请参阅“致Windows XP用户.txt”文件。对于Windows Vista、Windows 7及后续用户,可以直接运行本程序。 同时鉴于Windows 8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中默认未包含.NET Framework 2.0,因此新版的程序文件夹内将包含一个DirectX_Repair_win8_win10的特别版程序,该程序功能与通用版相同,基于.NET Framework 4.0开发,可以在Windows8(Windows 8.1、Windows 8.1 Update)、Windows 10系统中直接运行(其他系统如果安装了.NET Framework 4.0也可以运行这个特别版的程序)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值