предупреждение C4229: используется анахронизм: модификаторы данных игнорируются - PullRequest
2 голосов
/ 27 августа 2011

Сегмент ниже является частью большей функции в файле большего размера. Я сократил его до того, что считаю необходимым для объяснения моей нынешней проблемы.

Я использую 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);
}

То, что я читаю в других постах, наводит меня на мысль, что это как-то связано с #include. Вот и они. Если вам нужно содержимое любого из заголовочных файлов в кавычках, дайте мне знать.

#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"

Спасибо!

Ответы [ 3 ]

5 голосов
/ 27 августа 2011

Похоже, проблема в том, что WINAPI на самом деле является соглашением о вызовах (IIRC, оказывается, означает stdcall), поэтому нет смысла применять это к объявлению переменной lResult. У меня нет удобной для тестирования среды разработки Windows, но я сильно подозреваю, что предупреждение исчезнет, ​​если вы удалите WINAPI.

3 голосов
/ 27 августа 2011

Это наиболее вероятно, потому что вы помещаете WINAPI в объявление переменной lReturn.WINAPI расширяется до __stdcall, который определяет соглашение о вызове функции и не имеет значения little в объявлениях переменных.

1 голос
/ 27 августа 2011

MSDN страница в предупреждении указывает, что использование модификатора Microsoft в объявлении данных является устаревшей / анахроничной практикой.Если модификатор данных Microsoft используется для изменения чего-либо в этой конкретной строке, я думаю, что он скрыт в макросе LONG или WINAPI.

Я сам не знаком с Windows API, поэтому яне могу сказать из опыта, но ... очевидно, макрос WINAPI определен как __stdcall в windef.h .Если вы не назвали тот же макрос где-то еще без происшествий, держу пари, что это ваш преступник.

NM, избитый двумя людьми.: Р

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...