Получавам това предупреждение от инструмента за анализ на код във Visual Studio 2012. Кодът изглежда така:
using System;
using System.Runtime.InteropServices;
namespace MyProgramNamespace
{
class NativeMethods
{
[DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")]
public static extern IntPtr GetWindowLongPtr(IntPtr handle, int flag);
[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")]
public static extern IntPtr SetWindowLongPtr(IntPtr handle, int flag, IntPtr ownerHandle);
}
}
Компилирам само за x64, така че не се занимавам с използването на старите GetWindowLong и SetWindowLong. Тези имена на входни точки са правилни, доколкото мога да преценя.
Редактиране: РЕШЕНО. Оказва се, че проблемът е, че самото Visual Studio (и следователно инструментът за анализ на код) са 32-битови. Когато инструментът за анализ на код проверява user32.dll, за да види дали тези функции са там, той проверява 32-битовата версия на user32.dll (в C:/Windows/SysWOW64/) вместо тази, която програмата действително ще използва (64-битовата версия в C:/Windows/System32) и тези функции съществуват само в 64-битовата версия (32-битовата версия използва GetWindowLong/SetWindowLong вместо GetWindowLongPtr/SetWindowLongPtr (забележете PTR частта)).