此篇所言 只针对windows 32 bit 版本 Linux/Unix/Mac/Win64 无关... Win32 下 里面的那个makefile窝用了 无法编译成功 .. 如果你可以编译成功的话 可以无视这篇文章

1. [color=red]下载[/color]
首先 需要在官网下载d语言的编译器 ... http://dlang.org/download.html

然后 下载 d 语言的directx 库 - bindings 这个项目托管在 GitHub 了 ..https://github.com/CS-svnmirror/dsource-bindings

还有一个 omf 格式 的 lib 工具 这个工具在 下载包里面貌似是没有的 http://pan.baidu.com/s/1dD1ul6T(d语言使用 omf 格式的lib与vc的 coff 格式 lib冲突)

所有原料工具准备完成之后 开始配置环境 ..

2.[color=red]配置[/color]
[color=green]dmd编译器设置[/color] 文本模式打开 dmd2\windows\bin 下的 sc.ini 在
; environment for both 32/64 bit
[Environment]
DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import" 后面加上 "-I%@P%\..\..\src" ( 示例 : DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import" "-I%@P%\..\..\src") 保存退出 ...

[color=green]bindings[/color] 设置

把 bindings 下的 Win32 文件夹移动到 dmd 编译器 文件夹的 dmd2\src 下 ... 好了 剩下就是生成 lib 了 实际上这也是本篇比较麻烦的地方 窝只说怎么做 没说为什么 .. 有兴趣可以自己看看函数调用约定以及c/c++/d 风格的函数修饰名 以及 implib/.def/lib 的用法

[color=green]lib[/color] 设置

打开 lib 包里面的 implib ... bindings 不提供 lib 不然自己要LoadLibaray 或者 GetProcAddress 了 ... 很麻烦 ...再把系统system32下的 d3d9.dll 拿出来 新建一个.def文件 写上 (其余函数/DLL一样)
LIBRARY "d3d9"

EXPORTS
_Direct3DCreate9@4 = Direct3DCreate9
保存退出 打开命令行 输入 implib /noi /system d3d9.lib d3d9.def 得到的lib 放在 默认的lib目录下 ... (dmd2\windows\lib)

编译一下如下代码试一下是否配置成功

module winsamp;

pragma (lib, "gdi32.lib");pragma (lib, "d3d9.lib");

import core.runtime;import core.sys.windows.windows;//import win32.directx.d3d9caps;import win32.directx.d3d9;//import win32.directx.d3dx9;import std.string;

IDirect3DDevice9 Device = null;IDirect3DSurface9 _surface = null;

enum { VIDEO_WIDTH = 256,   VIDEO_HEIGHT = 240,  WINDOW_BOUNDARY = 4, WINDOW_TOP_BOUNDARY = 23}

extern(C)void FillBG (uint p32BitVram, uint pitch, uint color, uint width, uint height){

  asm {             naked               ; // use naked asm mode               pushad              ; // - N save lod frame                                     // - N

                mov ESI, 48[ESP]    ; // ESI <- width              mov EAX, 44[ESP]    ; // EAX <- color

                mov EBP, 40[ESP]    ; // EBP <- pitch              lea EBX, [ESI*4]    ; // EBX <- get correct x width size (32 bit * 4)

                mov EDI, 36[ESP]    ; // EDI <- p32BitVram             sub EBP, EBX        ; // EBP <- correct difference value

             mov EBX, 52[ESP]    ; // EBX <- y cnt              mov ECX, ESI        ; // save frame 

                align 16            ; // 

       FBG_loop:

               rep                 ; // pixel copy               stosd               ;

               add EDI, EBP        ; // move pixel pointer               mov ECX, ESI        ; // recover x cnt 

             dec EBX             ; // dec y cnt                jnz FBG_loop        ; // is end 

                popad               ; // over restore REG             ret                 ; // return child proc end    }}

void DrawSurface ( DWORD color ) {  static D3DSURFACE_DESC sur_desc;  static D3DLOCKED_RECT vramRECT;

 Device.BeginScene(); // start drawing ... Device.GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&_surface);

    _surface.GetDesc(&sur_desc);//    _surface.LockRect(&vramRECT,null, 0); 

  FillBG(cast(uint)vramRECT.pBits, vramRECT.Pitch, color, VIDEO_WIDTH,VIDEO_HEIGHT);

  _surface.UnlockRect();

  Device.EndScene();    Device.Present(null, null, null, null);}

extern(Windows)int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow){    int result;    void exceptionHandler(Throwable e) { throw e; }

    try    {        Runtime.initialize(&exceptionHandler);        result = myWinMain(hInstance, hPrevInstance, lpCmdLine, iCmdShow);        Runtime.terminate(&exceptionHandler);    }    catch (Throwable e)    {        MessageBoxA(null, e.toString().toStringz, "Error", MB_OK | MB_ICONEXCLAMATION);        result = 0;    }

    return result;}

int myWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow){    string caption = "DirectX Sample";    string className = "DWndClass";    HWND hWnd, btnClick, btnDontClick;    MSG  msg;    WNDCLASS wndclass;

    wndclass.style         = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;    wndclass.lpfnWndProc   = &WindowProc;    wndclass.cbClsExtra    = 0;    wndclass.cbWndExtra    = 0;    wndclass.hInstance     = hInstance;    wndclass.hIcon         = LoadIconA(null, IDI_APPLICATION);    wndclass.hCursor       = LoadCursorA(null, IDC_CROSS);    wndclass.hbrBackground = cast(HBRUSH)GetStockObject(WHITE_BRUSH);    wndclass.lpszMenuName  = null;    wndclass.lpszClassName = className.toStringz;

    if (!RegisterClassA(&wndclass))    {        MessageBoxA(null, "Couldn't register Window Class!", caption.toStringz, MB_ICONERROR);        return 0;    }

    hWnd = CreateWindowA(className.toStringz,  // window class name                         caption.toStringz,    // window caption                         WS_THICKFRAME   |                         WS_MAXIMIZEBOX  |                         WS_MINIMIZEBOX  |                         WS_SYSMENU      |                         WS_VISIBLE,           // window style                         CW_USEDEFAULT,        // initial x position                         CW_USEDEFAULT,        // initial y position                         VIDEO_WIDTH + WINDOW_BOUNDARY * 2,          // initial x size                         VIDEO_HEIGHT + WINDOW_BOUNDARY + WINDOW_TOP_BOUNDARY,         // initial y size                         HWND_DESKTOP,         // parent window handle                         null,                 // window menu handle                         hInstance,            // program instance handle                         null);                // creation parameters

    if (hWnd is null)    {        MessageBoxA(null, "Couldn't create window.", caption.toStringz, MB_ICONERROR);        return 0;    }

    ShowWindow(hWnd, iCmdShow);    UpdateWindow(hWnd);

  IDirect3D9 pD3d9 = Direct3DCreate9(D3D_SDK_VERSION);

   if( pD3d9 is null )   {     MessageBoxA(null, "Direct3DCreate9() - FAILED", "DirectX", MB_ICONERROR);     return false; }

   static D3DCAPS9 caps; pD3d9.GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);

 int vp = 0;  if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )       vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;    else      vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

  D3DPRESENT_PARAMETERS d3dpp;  d3dpp.BackBufferWidth            = 0;    d3dpp.BackBufferHeight           = 0;    d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;  d3dpp.BackBufferCount            = 1;    d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;  d3dpp.MultiSampleQuality         = 0;    d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD;    d3dpp.hDeviceWindow              = hWnd; d3dpp.Windowed                   = true; d3dpp.EnableAutoDepthStencil     = true;     d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8; d3dpp.Flags                      = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;   d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;  d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;

  pD3d9.CreateDevice(               D3DADAPTER_DEFAULT, // primary adapter                D3DDEVTYPE_HAL,     // device type                hWnd,               // window associated with device              vp,                 // vertex processing              &d3dpp,             // present parameters             &Device);           // return created device

    pD3d9.Release(); // done with d3d9 object

    while(msg.message != WM_QUIT)   {     if(PeekMessageA(&msg, null, 0, 0, PM_REMOVE))     {         TranslateMessage(&msg);           DispatchMessageA(&msg);       }     else        {           DrawSurface(0xfe11c3);        }    }  Device.Release();    return cast(int) msg.wParam;}

extern(Windows)LRESULT WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) nothrow{    switch (message)    {        case WM_DESTROY:            PostQuitMessage(0);            break;

        default:            break;    }

    return DefWindowProcA(hWnd, message, wParam, lParam);}

[img]http://dl2.iteye.com/upload/attachment/0107/3487/5b531e18-a8c8-3d2f-b1bb-75a84ae3812d.png[/img]

D语言配置 DirectX 环境相关推荐

  1. 使用Clion开发C语言程序,环境安装配置,保姆级教程

    墙裂推荐:C语言学习资源汇总,史上最全面总结,没有之一 C语言开发神器--Clion 首先我们到官网下载安装包 安装包下载后,鼠标双击下载的exe文件,然后点击next 选择安装目录,然后点击next ...

  2. 使用VS2019编写C语言程序,环境安装配置+代码调试

    墙裂推荐:C语言学习资源汇总,史上最全面总结,没有之一 环境安装配置 首先我们要在Visual Studio官方网站去下载安装包 https://visualstudio.microsoft.com/ ...

  3. 使用VS2019开始第一个C语言程序,环境安装配置+代码实例

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  4. visual studio 2019安装配置可编写c/c++语言的IDE环境

    visual studio 2019安装配置可编写c/c++语言的IDE环境 IDE的下载和安装: 首先,到visual studio官网下载vs2019的安装程序. 学生.或个人开发者免费下载第一个 ...

  5. 如何快速、科学的配置GO语言编译Android环境

    网上太多教程写的很粗略,这里详尽的列述go语言在windows系统下如何编译安卓程序 在此之前需要几个前提条件 安装了go语言的编译环境 拥有Go语言SDK 可选msi与zip格式,前者可以自动配置环 ...

  6. R语言七天入门教程一:配置运行环境

    R语言七天入门教程一:配置运行环境 一.R语言介绍 1.R语言是什么? 参考:R语言教程-R语言介绍 R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析.绘图.数据挖掘.R语言有丰富的 ...

  7. Go语言之 下载安装go以及vscode配置go环境

    上篇请移步到Go语言之 下载安装及第一个代码_水w的博客-CSDN博客 目录 一.下载安装以及配置go环境 1 下载安装go 2 配置go环境 二.安装配置git 一.在vscode上开发golang ...

  8. 安卓 c 语言开发环境搭建,用C++语言开发Android程序 配置开发环境

    如果你是一个C++语言的死忠,你喜欢C++语言到了偏执的状态,如果不想学习Java语言,或者你很讨厌Java语言,如果你认为Java虚拟机的内存占用太多和执行低效.如果你过度关注Andoird程序的执 ...

  9. C语言入门系列一之C语言介绍、环境配置和运行执行

    鉴于书本和教材文字过多.又难懂的缺点,所以我打算写一系列通俗移动的C语言入门教程,让大家在短时间内学习和掌握C语言,以及遇到C语言的一些问题该如何得到快速的解决.希望这些系列的教程,能够帮助到大家!该 ...

最新文章

  1. “坑爹”排行榜:Java语言最违反常识的功能点TOP 10
  2. layuiajax提交表单控制层代码_究竟怎么用Restful风格编代码必看这篇。(二)
  3. java核心技术面试精讲
  4. 数据量庞大的分页穿梭框实现
  5. Mybatis的COMMENT生成备注
  6. 阶乘的计算java_java中四种阶乘的计算
  7. linux python whl md5,Python计算一个目录下的所有文件的md5值,在Linux系统下面
  8. Nacos SDK for Scala 发布
  9. 【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之二
  10. Project Euler Problem 27小结
  11. 《Python自动化》学习笔记:百度云智能进行文字识别(代码干货)
  12. 手机签名工具_iOS越狱神器复活!自签工具 ReProvision 又可以愉快使用了
  13. 微信群二维码七天失效如何解决?有没有办法创建一个长期有效的微信群?
  14. ERD-ONLINE 2.0.3 免费在线数据库建模工具 正式发布
  15. Gazebo手册:【1】gazebo基本操作案例
  16. vue在图片标注矩形框
  17. 「python自学建议贴」Python学习路线+视频教程完整版
  18. ICP、PL-ICP、PP-ICP、GICP对比
  19. Vue获取(返回)上一个路由
  20. 蓝桥杯练习系统之基础训练Java版(2-26)—— 报时助手

热门文章

  1. 《信号与系统》—MATLAB分析与实现(二)
  2. 程序猿关注的微信公众号和网站--小结
  3. vue 列表内容自动向上滚动_【功能记录】Vue列表向上滚动无缝连接
  4. 抖音怎么把照片做成视频?超火的照片切换教程,3分钟就能搞定
  5. 嵌入式自学笔记:电路基础知识
  6. JRebel激活失效解决
  7. 数据库中的聚簇索引和非聚簇索引
  8. 黑马程序员------毕老师视频笔记第22天------图形化编程(2)
  9. 企业如何利用大数据做好大数据分析?
  10. JAVA毕业设计OA办公系统设计与实现计算机源码+lw文档+系统+调试部署+数据库