DllImport user32 vs user32.dll - PullRequest
       46

DllImport user32 vs user32.dll

6 голосов
/ 06 марта 2012

В чем разница между использованием DllImport здесь? В частности, "user32" означает просто "user32.dll" или "user32.lib" или что-то еще?

[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);

Возможно, вы можете игнорировать CharSet и CallingConvention.

Если они одинаковые, я могу переписать это, чтобы оно было более последовательным, но если нет, я не хочу иметь с этим кучу проблем.

Ответы [ 2 ]

12 голосов
/ 06 марта 2012

В этом примере нет разницы. Расширение .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". Правильно.

1 голос
/ 06 марта 2012

В Windows нет разницы, импорт будет выполнен успешно, если вы опустите расширение. Обычно опускание расширения желательно при запуске Mono с разделом конфигурации <dllmap>, где среда выполнения P / Invoke будет искать псевдонимы.

...