《零基础D编程入门五》

第五章:Windows


前言

本章描述的是32位的Windows系统下的D实现。当然,D在Windows下所特有的功能通常是不能被移植到其它平台的。

在D语言中不用C语言中的:

# include <win.s>

而是直接用;

import std.c.windows.windows;

一、调用协定

在C中,WindowsAPI的调用协定是__stdcall。在D中,仅需要使用:

extern (Windows)
{
    /*...函数声明...*/
}

Windows连接属性(linkage)设置了调用协定和名字碎解(namemangling)文法,以保持跟Windows系统的兼容性。
对于C中可能是__declspec(dllimport)或__declspec(dllexport)的函数,则需要使用属性export:

export void func (intfoo);

二、win可执行文件

WindowsGUI程序也可以使用D来编写。在\dmd2\samples\d\winsamp.d里,可以找
到一个示例。
   下面这些是必不可少的:
          1.不使用main函数作为程序入口点,而是换成使用WinMain函数。
          2.WinMain必须使用下列形式:

import core.runtime;
import std.c.windows.windows;

extern (Windows)
int WinMain (HINSTANCEhInstance,
       HINSTANCE  hPrevInstance,
       LPSTR  lpCmdLine,
       int nCmdShow)
{

    int result;
    void exceptionHandler(Exception e)
{
    throw e;
}


try
{
    Runtime.initialize(&exceptionHandler);
    result = myWinMain(hInstance,hPrevInstance,lpCmdLine,nCmdShow);
    Runtime.terminate(&exceptionHandler);
}

catch(Objecto)//捕捉任何未捕捉过的异常
{
    MessageBoxA(null,cast(char*)o.toString(),"Error",
    MB_OK|MB_ICONEXCLAMATION);
    result = 0;//失败
}
returnresult;
}

    intmyWinMain(HINSTANCEhInstance,
    HINSTANCEhPrevInstance,
    LPSTRlpCmdLine,
    intnCmdShow)
{
    /*...在这里插入用户代码...*/
}

函数myWinMain()用于放置用户代码,WinMain函数的其余部分是初始化和关闭D运行系统的样板文件。
3..def(模块定义文件-ModuleDefinitionFile)文件至少包含下面两行:

EXETYPE NT
SUBSYSTEM WINDOWS

如果没有这些内容,每次应用程序运行时,Win32都会打开一个文本控制台窗口。

4.编译器在识别到WinMain()的存在后,便发出对__acrtused_dll和运行库phobos.lib的引用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

即刻编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值