Я получаю это предупреждение от инструмента анализа кода в 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)).