zoukankan      html  css  js  c++  java
  • API函数的调用(包含一个大小写的问题)

    遇到问题:
        今天做的一个程序要调用AnimateWindow()函数来实现窗口的动画效果,参考书上在类的成员函数中直接调用该函数,没有做任何处理。然而实验时发现编译通不过。

    解决过程:
        查看MSDN后,发现AnimateWindow()函数说明中有以下描述

    Function Information

    Header Declared in winuser.h, include windows.h
    Import library user32.lib
    Minimum operating systems Windows 98, Windows 2000

    可见:
         1.要添加#include"winuser.h"或#include"windows.h"语句;
         2.在弹出菜单中选择:项目-"工程名"+属性-链接器-输入-附加依赖项,将user32.lib添加进去

    但此时编译时还是认不出AnimateWindow()及其参数,在AnimateWindow()上点击右键选"转到声明",发现在winuser.h文件中对AnimateWindow()的声明如下:

    #if(WINVER >= 0x0500)
    WINUSERAPI
    BOOL
    WINAPI
    AnimateWindow(
        IN HWND hWnd,
        IN DWORD dwTime,
        IN DWORD dwFlags);
    #endif /* WINVER >= 0x0500 */

    可见如果WINVER的取值不满足WINVER >= 0x0500的条件的话,AnimateWindow()函数的声明将不被编译,在WINVER上点击右键选"转到定义",发现在stdafx.h文件中对WINVER的定义如下:

    #ifndef WINVER    // 允许使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
    #define WINVER 0x0400  //为 Windows98 和 Windows 2000 及更新版本改变为适当的值。
    #endif

        这样问题就出来了,由于WINVER的值不满足WINVER >= 0x0500的条件,导致AnimateWindow()函数的声明不被编译,将#define WINVER 0x0400语句改成#define WINVER 0x0500,再编译,就发现AnimateWindow()函数已经可以识别了。

        但是AnimateWindow()函数的一个参数宏仍然不能识别,而其它的参数宏却可以,经过检查发现由于参数宏都是大写字母,是自己一时粗心看错了拼写导致的,改成正确的拼写后程序编译通过!

    心得体会:

        1.“转到定义“的解决问题的方法十分重要。
        2.对于宏等全大写字母的标志要注意拼写。
        3.MSDN要仔细的阅读。

  • 相关阅读:
    SpringBoot项目maven 打包时跳过测试
    scss 学习笔记
    万事都源于一个字:缘
    H To begin or not to begin 题解(思维)
    条件 题解(bitset优化floyd)
    Dima and Salad 题解(01背包变形)
    P1052 [NOIP2005 提高组] 过河 题解(dp+数论优化)
    A Simple Math Problem 题解(数论)
    威佐夫博弈
    P3951 [NOIP2017 提高组] 小凯的疑惑 题解(数论/结论题)
  • 原文地址:https://www.cnblogs.com/toosuo/p/979957.html
Copyright © 2011-2022 走看看