• C++ WINDOWS API 如何使用NMAKE和CL编译


    目录

    1       简单的Windows API代码示例... 1

    2       安装环境与分析... 1

    3       设置为当前DOS窗口环境系统变量... 2

    配置信息... 2

    设置信息... 3

    4       运行效果... 3

    设置系统环境变量信息... 3

    NMAKE编译... 3

    CL编译... 5

    5       小结... 5

    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,因为安装VS2008专业版本(非EXPRESS版本的)已经包含了Microsoft Platform SDK与编译器,因不使用Microsoft Platform SDK都可以编译C或C++。

    安装的VS2008专业版中,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 是微软公司推出的开发环境


     

    图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

    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;

    4       运行效果

    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;

    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:\>

    (因为这里是直接从VS2008 HelloMsg的MakeFile文件直接Copy过来的,所以会出现一些关于在VS2008 运行的waring信息,MakeFile文件大家可以自己写)

    打开Debug调试运行HelloMsg:

     

    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

     

    5       小结

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

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

    Top
    关注
    评论

    博文分享:



    许可协议:

    Creative Commons License

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    git(常用命令)思维导图...
    有关gitlab的神秘操作.....version&&domain设置...
    Gitlab不小心关闭了sign-in,无法登录web的坑。。。
    聊聊CMSIS-RTOS是什么东东
    c#接口interface学习
    没有内置小鹤双拼的rime输入法就是差劲
    stm32中的型号对比——为什么很少用STM32F2,F3?
    stm32软件编程的框架及注意事项——rtos篇
    modbus-poll和modbus-slave工具的学习使用——modbus协议功能码3的解析(及欧姆龙温控器调试笔记)
    keil中error: #70: incomplete type is not allowed—解决方法
  • 原文地址:https://www.cnblogs.com/yongfeng/p/3044434.html
Copyright © 2020-2023  润新知