【问题标题】:warning C4229: anachronism used : modifiers on data are ignored警告 C4229:使用不合时宜:忽略数据的修饰符
【发布时间】:2011-08-27 19:46:05
【问题描述】:

下面的片段是较大文件中较大函数的一部分。我已将其简化为我认为可以解释我当前问题的基本内容。

我正在使用 Visual Studio 2010。

调用 RegConnectRegistryA 的那一行导致编译器因此警告我:“警告 C4229:使用过时错误:忽略数据的修饰符”。这是编译器输出中唯一的警告或错误。构建确实成功,并且可执行文件按预期运行。但我确实想摆脱那个警告。 (老实说,我认为它已经存在了好几个月了。)

extern "C" __declspec(dllexport) void whoOpsRegistryGetREG_SZ(
    LPCSTR szServer, 
    LPCSTR szKey, 
    LPCSTR szValue, 
    char* szReturn, 
    int iSize) 
{
    HKEY hKey;
    LONG WINAPI lReturn = ::RegConnectRegistryA(
        szServer, 
        HKEY_LOCAL_MACHINE, 
        &hKey);
}

我在其他帖子中读到的内容让我相信它在某种程度上与#includes 相关。所以他们在这里。如果您需要引号中的任何头文件的内容,请告诉我。

#include "stdafx.h"
#include <windows.h>
#include <initguid.h>
#include <ole2.h>
#include <mstask.h>
#include <msterr.h>
#include <objidl.h>
#include <wchar.h>
#include <stdio.h>
#include <stdarg.h>
#include <lm.h>
#include "whoOpsPrivate.h"
#include "whoOps.h"
#include "jni.h"
#include "whoOps_TaskScheduler.h"
#include "whoOps_ServiceMangler.h"
#include "whoOps_RegistryRaptor.h"
#include "../../cyclOps.h"

谢谢!

【问题讨论】:

    标签: visual-studio-2010 winapi


    【解决方案1】:

    在我看来,问题在于WINAPI 实际上是一个调用约定(IIRC 原来是指stdcall),因此将其应用于变量lResult 的声明是没有意义的。我没有方便测试的 Windows 开发环境,但我强烈怀疑如果删除 WINAPI,警告会消失。

    【讨论】:

    • 耶!做到了。这就是在不熟悉的领域工作时使用复制粘贴继承得到的结果。
    • 更具体地说,如果我没记错的话,__stdcall/WINAPI__pascal__far __pascal 的替代品。它被 64 位编译器完全忽略,因为目前可用于 x64 处理器的唯一 Windows 调用约定是 __fastcall (x64)(通常称为“x64 调用约定”或“MS x64 调用约定”)、@987654330 @ (x64) (MSVC) 和 __regcall (英特尔)。
    【解决方案2】:

    这很可能是因为您将 WINAPI 放在了lReturn 的变量声明中。 WINAPI 扩展为 __stdcall,它指定了一个函数调用约定,并且 little 对变量声明没有任何意义。

    【讨论】:

      【解决方案3】:

      警告中的 MSDN page 表明在数据声明中使用 Microsoft 修饰符是一种过时/过时的做法。如果使用 Microsoft 数据修饰符来修改该特定行上的某些内容,我最好的猜测是它隐藏在 LONG 或 WINAPI 宏中。

      我自己对 Windows API 并不熟悉,所以我不能从经验中说出来,但是……显然,WINAPI 宏是defined as __stdcallin windef.h。除非你在其他地方调用了相同的宏而不发生意外,否则我敢打赌那是你的罪魁祸首。

      NM,被两个人打败了。 :p

      【讨论】:

        猜你喜欢
        • 2012-10-23
        • 2021-11-11
        • 1970-01-01
        • 2013-10-04
        • 1970-01-01
        相关资源
        最近更新 更多