知识若不分享    实在没有意义

查看完整版本: D语言调用标准库未声明的windows api

yidabu 2007-5-2 09:29

D语言调用标准库未声明的windows api

D语言调用标准库未声明的windows api知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070502点击下面网址查看原文:http://www.d-programming-language-china.orgtag:D语言标准库,d语言 windows,d语言入门        在std.c.windows.windows里声明了Windows api数据类型,和常见的windows api函数,如果要用到windows.d里没有声明的api函数怎么办        在上一个教程里,D语言论坛 http://www.d-programming-language-china.org 详细讲解了在D语言里直接调用windows api的方法,见下面文章:        http://bbs.d-programming-language-china.org/thread-551-1.html        我们打开windows.d,看看里面怎么做的,照抄就是了。        在阅读本文前,建议先看一下 D语言 atrributes:        http://bbs.d-programming-language-china.org/thread-472-1.html        QUOTE:                                D 提供了一种方便的调用 C 函数和操作系统 API 函数的方法,因为对这两者的兼容都是必要的。链接类型 是大小写敏感的,并且可以由实现扩展(它们不是关键字)。C 和 D 是必须提供的,其他的含义由实现定义。C++保留将来使用。实现注记:对于 Win32 平台来说,应该支持 Windows 和 Pascal 。                Windows API 调用约定是:        [Copy to clipboard] [ - ]CODE:                                extern (Windows):                    void *VirtualAlloc(                    void *lpAddress,                    uint dwSize,                    uint flAllocationType,                    uint flProtect                    );                以WinExec函数为例        1 在windows.d里查找WinExec,未找到        2 在msdn.microsoft.com搜索WinExec        http://msdn2.microsoft.com/en-us/library/ms687393.aspx:( 本文出处: http://www.d-programming-language-china.org )        找到WinExec函数的语法原型是:        [Copy to clipboard] [ - ]CODE:                                UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);                3 理解函数参数的意思        Windows api的数据类型见下面:        http://msdn2.microsoft.com/en-us/library/aa383751.aspx        LPCSTR:        指向一个以"NULL"结束的8bit WINDOWS字符串常量的指针        QUOTE:                                Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters,typedef __nullterminated CONST CHAR *LPCSTR;                也就是LP是指针的意思,C是constant常量的意思,STR是字符串。( 本文出处: http://www.d-programming-language-china.org )        UINT:        32位无符号整数( 本文出处: http://www.d-programming-language-china.org )        QUOTE:                                Unsigned INT. This type is declared in WinDef.h as follows:typedef unsigned int UINT;                INT:32-bit signed integer. This type is declared in WinDef.h as follows:typedef int INT;                也就是U是Unsigned的意思。        一定要理解windows api数据类型的含义和对应的D语言数据类型。        可以参考下表:        http://bbs.d-programming-language-china.org/thread-455-1.html        在D语言里,8位的无符号utf-8字符是char类型。32位无符号整数是uint类型。        再来看看windows.d是怎么定义的。        打开windows.d,查找LPCSTR,结果找到:        QUOTE:                                alias CHAR *LPCSTR;                CHAR还不是D语言的数据类型,再往上找:( 本文出处: http://www.d-programming-language-china.org )        QUOTE:                                alias char CHAR;                也就是*LPCSTR是char的别名,和我们预料的一致。        同样可以在windows.d里找到:        QUOTE:                                alias uint UINT;                明白以上原理,我们就可以完全可以自己写出windows.d来了        4 D语言调用Windows api函数WinExec代码        下面就是全部代码:        [Copy to clipboard] [ - ]CODE:                                import std.c.windows.windows;    //for WinExec                import std.windows.charset;    //for toMBSz                                void main()                {                    // http://bbs.d-programming-language-china.org  注toMBSz函数是为了生成null结尾字符串                    LPCSTR lpCmdLine = toMBSz(r"C:\Program Files\Internet Explorer\iexplore.exe http://www.d-programming-language-china.org");                    UINT uCmdShow = SW_SHOWMAXIMIZED;                    WinExec(lpCmdLine,uCmdShow);                }                                // http://bbs.d-programming-language-china.org  下面就是定义要调用的windows api函数                extern (Windows)                {                    export {                        UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);                    }                }        ( lastupdate:20070502 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D语言调用标准库未声明的windows api