Использование явного вызова Pinvoke в C++ (атрибут DllImport)
Платформа .NET Framework предоставляет функции вызова неуправляемого кода (или PInvoke) с помощью атрибута Dllimport, что позволяет управляемым приложениям вызывать неуправляемые функции, поставляемые в библиотеках DLL. Явный вызов PInvoke необходим в случаях, когда неуправляемые API-интерфейсы упаковываются как библиотеки DLL и исходный код недоступен. Например, вызов Pinvoke необходим для вызова функций Win32. В остальных случаях следует использовать неявный вызов P{Invoke. Дополнительные сведения см. в разделе Использование взаимодействия языка C++ (неявный PInvoke).
Вызов PInvoke выполняется с помощью атрибута DllImportAttribute. Этот атрибут принимает значение имени библиотеки DLL в качестве своего первого аргумента и помещается перед объявлением функции для каждой используемой в библиотеке DLL точки входа. Подпись функции должна соответствовать имени функции, экспортируемой из библиотеки DLL (однако часть преобразования типов можно выполнить неявно, объявив управляемые типы с помощью атрибута DllImport).
Это приведет к созданию управляемой точки входа для каждой собственной функции библиотеки DLL, содержащей необходимый код перехода (или преобразователь) и простые преобразования данных. Затем можно использовать эти точки входа для вызова управляемых функций из библиотеки DLL. Код, вставленный в модуль в результате вызова Pinvoke, является полностью управляемым, а явный вызов Pinvoke поддерживается для компиляции /clr, /clr:pure и /clr:safe. Дополнительные сведения см. в разделе Чистый и проверяемый код (C++/CLI).
В этом подразделе
Практическое руководство. Вызов неуправляемых библиотек DLL из управляемого кода с помощью PInvoke
Практическое руководство. Маршалирование строк с помощью PInvoke
Практическое руководство. Маршалирование структур с помощью PInvoke
Практическое руководство. Маршалинг массивов с помощью службы PInvoke
Практическое руководство. Указатели функций маршалирования, использующие PInvoke
Практическое руководство. Маршалинг внедренных указателей с помощью PInvoke