Атрибут DllImport библиотека user32 против библиотека user32.файл DLL
в чем разница между обычаями DllImport здесь? В частности, делает "библиотека user32" просто "библиотека user32.dll", или это означает " user32.либерал" или что-то еще?
[DllImport("user32")]
protected static extern int GetKeyboardState(byte[] pbKeyState);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
protected static extern short GetKeyState(int vKey);
вероятно, вы можете игнорировать кодировку и CallingConvention.
если они одинаковы, я могу переписать это, чтобы быть более последовательным, но если нет, я не хочу иметь кучу проблем с этим.
2 ответов
в этом примере нет никакой разницы. Этот.расширение dll будет автоматически добавлено в "user32"
создать "user32.dll"
. Однако, это не всегда так. Если имя файла библиотеки содержит точку, торасширение dll будет не добавляется автоматически.
примеры:
[DllImport("user32")]
--> Решает "Библиотека User32.файл DLL." Правильный.
[DllImport("user32.dll")]
--> Решает "Библиотека User32.файл DLL." Правильный.
[DllImport("mylib.version5")]
--> решает "проекта " MyLib".version5". неправильно
[DllImport("mylib.version5.dll")]
--> решает "проекта " MyLib".version5.файл DLL." Правильный.
в Windows нет никакой разницы, импорт будет выполнен успешно, если вы опустите расширение. Обычно опускание расширения желательно при запуске Mono с помощью <dllmap>
раздел конфигурации, где среда выполнения P / Invoke будет искать псевдонимы.