Атрибут 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 будет искать псевдонимы.