lovebet爱博体育应用程序开垦入门,怎样利用NMAKE和CL编写翻译

目录

目录

1       轻易的Windows API代码示例… 1

1.1       第二个实例程序.. 1

2       安装景况与解析… 1

1.1.1       start.exe. 1

3       设置为近些日子DOS窗口意况类别变量… 2

1.1.2       Windows API 2

安插消息… 2

1.1.3       程序入口函数.. 2

安装消息… 3

1.1.4       start.c 代码深入分析.. 3

4       运转效果… 3

1.2       编写翻译代码.. 4

安装系统情形变量音信… 3

1.2.1       安装Visual Studio. 4

NMAKE编译… 3

1.2.2       安装Microsoft Platform SDK. 5

CL编译… 5

1.2.3       集成Microsoft Platform SDK与Visual C++ 速成版.. 7

5       小结… 5

1.2.4       Visual Studio 专门的职业版或协会系统版.. 8

 

1.2.5       使用图形化IDE 创建工程、举办编写翻译.. 8

 

1.2.6       使用命令行工具编译.. 9

 

1.2.7       注意事项.. 10

 

1.3       小结.. 11

1       简单的Windows API代码示例

/*--------------------------------------------------------------HelloMsg.c -- Displays "Hello, Windows 98!" in a message box
(c) Charles Petzold, 1998
--------------------------------------------------------------*/
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;
return 0 ;
}

分析:

  1. windows.h头文件须要饱含
  2. messagebox 必要包括windows
    api,需求user32.lib,在C:\WINDOWS\system32,在那之中蕴藏了ulib.dll、user32.lib、kernel32.dll等。

编写翻译时,系统自动寻觅user32.lib,代码供给以下写法:

#include <windows.h>
#pragma comment(lib,"user32.lib")

编写翻译时,手动加多,则编写翻译时须求以下写法:

cl hellomsg.c user32.lib
  1. 代码运营示例

NMAKE运行:

nmake hellomsg.mak

CL运行:

cl hellomsg.c user32.lib

 

 

2       安装情状与分析

不安装Microsoft Platform
SDK,因为安装VS二〇〇九标准版本(非EXPRESS版本的)已经包括了Microsoft
Platform SDK与编写翻译器,因不行使Microsoft Platform SDK都得以编译C或C++。

设置的VS二〇〇八专门的学问版中,C:\Program Files,在这之中满含了2个文本:

文件名称

文本夹内容

Microsoft SDKs

  1. Microsoft SDKs→Windows→V6.0A→bin、include、lib

微软乎乎件开荒工具包(SDK),它提供文书档案的链接,代码示例,工具,标题,库,和另外文件,开拓职员能够应用它来创制软件应用程序和库。

Microsoft Visual Studio 9.0

  1. Microsoft Visual Studio
    9.0→VC→Bin(内有NAMKE,CL编写翻译器和LINK链接器)、Include、lib

 

  1. Microsoft Visual Studio
    9.0→Common7→IDE(msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv,生成*.obj、*.pdb,如图1)

Visual Studio 是微软集团生产的付出景况

 lovebet爱博体育 1

图1

 

3       设置为当下DOS窗口遇到体系变量

 

3.1布署音信

亟待用DOS窗口编写翻译(借使设置了Microsoft Platform
SDK,依照以下配置消息就可以更简约编写翻译):

路径

文件内容

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin

 

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include

包含windows.h头文件

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib

编译时需要的SDK的LIB

C:\Program Files\Microsoft Visual Studio 9.0\VC\bin

 

C:\Program Files\Microsoft Visual Studio 9.0\VC\include

 

C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

 

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE

生成*.obj、*.pdb

1.1    第贰个实例程序

3.2设置音讯

在DOS窗口运维(在当下窗口,境遇系列变量有效;当然也得以通过本身的管理器属性值固定它,这里暂不固定):

set path=%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin;%ProgramFiles%\Microsoft Visual Studio 9.0\VC\bin;%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE;
set include=%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\Include;%ProgramFiles%\Microsoft Visual Studio 9.0\VC\include;
set lib=%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\Lib;%ProgramFiles%\Microsoft Visual Studio 9.0\VC\lib;

 

 

 

1.1.1    start.exe

start.ext是本书的第贰个实例,成立一个轻易易行的音讯对话框。

 lovebet爱博体育 2

图1-1 第一个实例程序

实例1-1,完结代码如下:

/* ************************************
*《精通Windows API》 
* 示例代码
* start.c
* 1.1.1    第一个示例程序,弹出消息对话框
**************************************/

/* 预处理 */
/* 头文件 */
#include <windows.h>
//连接时使用User32.lib
#pragma comment (lib, "User32.lib")

/* ************************************
* WinMain
* 功能    Windows应用程序示例
**************************************/
int WinMain(
            HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPSTR lpCmdLine,
            int nCmdShow
            )
{
    // 调用API函数 MessageBox
    MessageBox(NULL,
        TEXT("开始学习Windows编程"),
        TEXT("消息对话框"),
        MB_OK);
    return 0;
}

 

4       运营效果

1.1.2    Windows API

所谓 API 是“Application Program
Interface”的简写,中文意思为“应用程序接口”,它是一雨后冬笋函数、宏、数据类型、数据结构的集中,运维于Windows系统的应用程序能够动用那么些操作系统提供接口来产生应用程序须求的功力。

MessageBox函数是Windows众多API中的贰个,其职能是弹出八个对话框。

4.1安装系统遇到变量新闻

G:\>set path=C:\WINDOWS\system32;C:\Program Files\Microsoft SDKs\Windows\v6.0A\b
in;C:\Program Files\Microsoft Visual Studio 9.0\VC\bin;C:\Program Files\Microsof
t Visual Studio 9.0\Common7\IDE;
G:\>set include=C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include;C:\Program
Files\Microsoft Visual Studio 9.0\VC\include;
G:\>set lib=C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib;C:\Program Files\M
icrosoft Visual Studio 9.0\VC\lib;

 

1.1.3    程序入口函数

WinMain 函数是程序入口点,相当于 C 语言的 main 函数,其定义如下:

int WinMain(
            HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPSTR lpCmdLine,
            int nCmdShow
            )

 

WinMain 函数有 4 个参数:hInstance、hPrevInstance、lp
CmdLine、nCmdShOW。

  • 第三个参数是 hInstance,数据类型是
    HINSTANCE,此参数表示应用程序这次运营实例的句柄。
  • 其次个参数是 hPrevInstance,数据类型也是
    HINSTANCE,表示应用程序在此之前运转的句柄,不过在实际上利用中,此参数始终为
    NULL。
  • 其几个参数 lpCmdLine 是运作时参数。如在 cmd命令行中运维“start.ext
    Command Arguments”,那么lpCmdLine就指向字符串“Command
    Arguments”,功能与C语言中main函数的参数作用类似。数据类型LPSTLX570是Windows
    API常见的字符串类型。
  • 最终二个参数是
    nCmdShow,数据类型是int,表示应用程序窗口(尽管有)的来得状态。WinMain
    函数的回来类型是 int 型的。

4.2NMAKE编译

G:\>nmake hellomsg.mak
Microsoft (R)  程序维护实用工具  9.00.21022.08  版
版权所有  (C) Microsoft Corporation。保留所有权利。
No configuration specified. Defaulting to HelloMsg - Win32 Debug.
Warning: cannot find "HelloMsg.dep"
if not exist ".\Debug/" mkdir ".\Debug"
cl.exe @C:\DOCUME~1\ZHYONG~1\LOCALS~1\Temp\nmB1.tmp
cl:  命令行  warning D9035 :“GX”选项已否决,并将在将来的版本中移除
cl:  命令行  warning D9036 :使用“EHsc”而不使用“GX”
cl:  命令行  warning D9002 :忽略未知选项“/MLd”
cl:  命令行  warning D9002 :忽略未知选项“/YX”
HelloMsg.c
link.exe @C:\DOCUME~1\ZHYONG~1\LOCALS~1\Temp\nmB2.tmp
LINK : warning LNK4044:  无法识别的选项“/pdbtype:sept”;已忽略
G:\>

 

(因为此地是一贯从VS二零一零HelloMsg的MakeFile文件平昔Copy过来的,所以会冒出部分有关在VS二〇〇八运转的waring音讯,MakeFile文件大家能够团结写)

开垦Debug调节和测量试验运转HelloMsg:

 lovebet爱博体育 3

1.1.4    start.c 代码剖析

预编译申明,在本实例中国共产党有两条预编写翻译表明:

#include <windows.h>

 

lovebet爱博体育,在Windows应用程序开拓中所使用的居多的数据类型、结构、API接口函数都在Windows.h。

#pragma comment (lib, "User32.lib")

 

那行代码指明将源文件编写翻译生成靶子文件(.obj)后,将对象文件链接成可奉行文件的进程中须求利用到
User32.lib,因为 User32.lib 中富含了 MessageBox的链接新闻。尽管在链接程序时,调用链接器的参数中指明了链接时索要接纳到
user32.lib,那—句程序代码可以轻巧(参见第3章)。

代码接下去是 WinMain 函数的概念。在 WinMain 函数中调用了 MessageBox函数。

     // 调用API函数 MessageBox
    MessageBox(NULL,
        TEXT("开始学习Windows编程"),
        TEXT("消息对话框"),
        MB_OK);

 

MessageBox 函数的原型如下:

 int MessageBox(          HWND hWnd,
    LPCTSTR lpText,
    LPCTSTR lpCaption,
    UINT uType
);

 

首先个参数 hWnd 是信息框所属的窗口的句柄,能够设置为 NULL。

其次个参数 lpText 是字符串,表示消息框所突显的音信。

其八个参数 lpCaption 是字符串,表示音讯框的标题。

第八个参数 uType 是信息框的连串,在实例 1-1中安装为“MB_OK”,意思是音信框包罗贰个“显著按键”MessageBox函数调用之后,程序重临 O,甘休 WinMain 函数,退出进程。

 lovebet爱博体育 4

Minimum DLL Version

user32.dll

Header

Declared in Winuser.h, include Windows.h

Import library

User32.lib

Minimum operating systems

Windows 95, Windows NT 3.1

Unicode

Implemented as ANSI and Unicode versions.

您能够和睦参照他事他说加以考察表头文件或 / Platform SDK / User Interface Services /
Windowing / Dialog Boxes / Dialog Box Reference / Dialog BoxFunctions里的文书。

 

4.3 CL编译

G:\>cl hellomsg.c user32.lib
用于  80x86  的  Microsoft (R) 32  位  C/C++  优化编译器  15.00.21022.08  版
版权所有(C) Microsoft Corporation。保留所有权利。
hellomsg.c
Microsoft (R) Incremental Linker Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hellomsg.exe
hellomsg.obj
user32.lib

 lovebet爱博体育 5

1.2    编写翻译代码

SDK:Platform SDK for Windows XP SP2(每一个版本都有Platform SDK for
Windows7、Vista等,安装大概45分钟左右)

http://files.cnblogs.com/yongfeng/Microsoft_Platform_SDK.zip

 

工具:Visual C++ 2008 Express Edition(Visual C++速成版 or Visual C++
2005 Express Edition)

5       小结

源文件下载:http://files.cnblogs.com/yongfeng/HelloMsg.rar

PDF下载:http://files.cnblogs.com/yongfeng/WINDOWSAPI.rar

1.2.1    安装Visual Studio

Visual Studio 包蕴速成版、专门的学业版和团类别统版本(Visual Studio Team
System)。速

成版是无需付费的本子,专门的学业版和团伙系统版本是商业版。不过速成版的效果与专门的职业

未曾太大的界别。

    借使读者使用 Visual C++速成版,需单独安装 Microsoft Platform
SDK,并将其与

Visual Studio 集成在联合 ,才足以在本机举办 Windows 应用程序的开拓。

Visual C++速成版的设置步骤如下:

(1)  从微软公司的站点上下载普通话版的 Visual
C++速成版,也可以从本书配套光盘中获得。运行 vcsetup.exe。

(2)  单击“下一步”按钮。

在这一步,读者需求选取须要设置的零部件。推荐安装图形化的 IDE,IDE
将大大有利代码的编写制定、编写翻译等专业。不设置图形化
IDE,读者也能够利用命令行工具来编写翻译程序。

(3)  在装置的进度中,须要延续上 Internet。安装程序将下载 Windows
Installer 3.1、

NET Framework 和 Visual C++ 2006 速成版进行安装。

安装完结后,举办登记就足以采纳了。在 Visual Studio 安装目录下的 bin
文件夹中,读者能够看出包涵 cl.exe、nmake.exe、link.exe、lib.exe、rc.exe
等编写翻译和链接工具。

安装了Visual
C++速成版后独自能够张开典型C程序和C++程序的开辟,不过还无法调用Windows
API,不恐怕做到二个 Windows 应用程序所需的好多成效,因为相当不足Platform
SDK。

1.2.2    安装Microsoft Platform SDK

安装供给注意2点:

(1) 
在一般景色下,选拔独立安装能够满足使用须要。这里须求开展局地设置,所以选择“Customer”。

(2)  选取“Configuration Options” →“Register Environment
Variables”选项,并选用完全安装。假使不选拔此项,Visual Studio
工具将不可能找到 SDK。

 lovebet爱博体育 6

 lovebet爱博体育 7

1.2.3    集成Microsoft Platform SDK与Visual C++ 速成版

在安装完结后,还必要对 Visual C++速成版实行设置,使编写翻译链接工具得以找到
SDK。倘诺编写翻译链接工具找不到 SDK,那么在源代码中的 API
调用将会发出编写翻译链接错误。

在 Visual
C++速成版中张开如下操作。在菜单中选拔“工具”→“选项”,出现“选项”对话框,如图
1-5 所示。

(1)  设置IDE环境

“选项”对话框接纳“项目和解决方案” →“VC++目录”

单击“新建”文件夹,接纳Platform SDK安装目录下的“Include”文件夹。

单击“新建”文件夹,采纳Platform SDK安装目录下的“Lib”文件夹。

单击“新建”文件夹,采纳Platform SDK安装目录下的“Bin”文件夹。

 lovebet爱博体育 8

图1-5 设置Visual Studio,集成Platform SDK

(2)  设置景况变量

一经设置Platform SDK时未尝选用“Configuration Options” →“Register
Environment
Variables”,或然选拔了“Typical”安装模块,那么还需求为系统增添意况变量。

MSSdk 变量:值为 SDK 安装目录。

Mstools 变量:值为 SDK 安装目录。

INETSDK 变量:值为 SDK 安装目录。

Bkoffice 变量:值为 SDK 安装目录。

Basemake 变量:值为%MSSdk%\Include\ BKOffice.Mak。

INCLUDE 变量:值为%MSSdk%\Include\。

LIB 变量:值为%MSSdk%\Lib\。

并在 Path 变量前加上%MSSdk%\Bin\;%MSSdk%\Bin\WinNT\。

Visual Studio 职业版无需上述设置,可是也足以动用这种方式来更新 Visual
Studio

所接纳的 SDK 的版本。

1.2.4    Visual Studio 专门的学问版或团系列统版

假设读者有 Visual Studio
专门的工作版或共青团和少先队系统版,可平昔开展安装,专门的工作版已经内嵌了

Platform SDK。在安装到位后,不需配置就可选用。

1.2.5    使用图形化IDE 创设工程、实行编写翻译

在变成安装和装置后,本小节将以 Visual C++速成版为例表明怎么着编译 1.1.1
节的主次。

  • 打开 Visual C++速成版。
  • 新建筑工程程,在菜单中选用“文件一新建筑工程程”在新建筑工程程对话框中的“Visual
    C++”体系下,接纳“空项目”,如图 1-6 所示。

 lovebet爱博体育 9

图1-6 Visual Studio新建筑工程程

  • 输入项目名称,完毕项目标确立。
  • 在“施工方案装源管理器”中,右键单击工程名称,选用“增加一新建项”,在“增加新项”对话框中,接纳“代码”,键入文件名称“start”,文件后缀是“.c”或许是“.cpp”
    都能够,如图 1-7 所示。

 lovebet爱博体育 10

图1-7 为工程增多代码文件

  • 将实例 1-1 代码复制到 start.c 中。
  • 只要无需调护医疗,在工具栏(位于菜单栏下)司令员“Debug”改为“Release”。
  • 在菜单中选拔“生成毕生成应用方案”(或行使火速键,一般是 F7)。
  • 若是编写翻译未有报错,则在程序目录下会有“Debug”或” 
    “Release”文件夹,可实施文件位于此。

 lovebet爱博体育 11

1.2.6    使用命令行工具编写翻译

除了运用图形化的 IDE 工具,还是能够利用 nmake
工具对前后相继开展编写翻译和链接。nmake 是二个字符分界面程序,通过 Makefile
配置。在运用 nmake工具时索要利用 Visual Studio的命令行。

将实例 1-1 中的代码存为 start.c,然后将实例 1-2 的从头到尾的经过存为文件
makefile。

实例 1-2 编写翻译 sta rt.c 的 makefile ,本实例是叁个 makefile
文件,能够用于编写翻译 start.c。编写翻译时索要采用到 nmake 工具,其代码如下:

D:\TestDemo>nmake /f makefile

Microsoft (R) Program Maintenance Utility   Version 7.00.8882
Copyright (C) Microsoft Corp 1988-2000. All rights reserved.

        if not exist "START_BIN/" mkdir START_BIN
        cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_X86_=1  -DWIN32 -
D_WIN32 -W3 -D_WINNT -D_WIN32_WINNT=0x0502 -D_WIN32_IE=0x0600 -DWINVER=0x0502
-D_MT -MTd /Gz /Fo"START_BIN\\" /Fd"START_BIN\\" start.c
start.c
        link  /INCREMENTAL:NO /NOLOGO -subsystem:windows,5.02 -out:START_BIN\sta
rt.exe START_BIN\start.obj kernel32.lib  ws2_32.lib mswsock.lib advapi32.lib buf
feroverflowu.lib

 

 

1.2.7    注意事项

境况类别变量要包涵3个主要路线:

LIB→C:\Program Files\Microsoft Visual Studio
9.0\VC\include;C:\Program Files\Microsoft
SDKs\Windows\v6.0A\Include

INCLUDE→C:\Program Files\Microsoft Visual Studio
9.0\VC\lib;C:\Program Files\Microsoft Visual Studio
9.0\Common7\IDE;

PATH→C:\Program Files\Microsoft Visual Studio 9.0\VC\bin;

此间运用的是Windows Platform SDK运转,即如下图:

 lovebet爱博体育 12

 

若使用DOS窗口,则参谋文章:

C++ WINDOWS API 怎么样采纳NMAKE和CL编写翻译

http://www.cnblogs.com/yongfeng/archive/2013/04/26/3044434.html

 

1.3    小结

PDF下载:http://files.cnblogs.com/yongfeng/WINDOWSAPI01.rar

摘自:《精通Windows.API-函数、接口、编制程序实例》 人民邮政和邮电通讯出版社

范文庆、周彬彬、安靖写作