Книга: C# для профессионалов. Том II
Доступ к неуправляемому коду
Доступ к неуправляемому коду
Хотя .NET может взаимодействовать с неуправляемым кодом в любой DLL, чаще всего он взаимодействует с кодом в DLL, составляющим базовую функциональность Windows API. Это включает user32.dll
, gdi32.dll
и kernel32.dll
. Процесс представления функций из этих DLL для кода .NET должен быть знаком любому, кто использовал ключевое слово Declare
для предоставления вызовов Win32 API для кода VB6:
[sysimport(dll="user32.dll")]
public static extern int MessageBoxA(int Modal, string Message, string Caption, int Options);
В приведенном примере с помощью оболочки .NET вызова осуществляется вызов Windows API, который выводит окно с сообщением. В атрибуте выше функции оболочки определяется DLL, которой функция в оболочке должна делегировать свою работу. Теперь клиент кода .NET может вызывать функцию оболочки для вызова функций API:
MessageBoxA(0, "PInvoke worked!", "PInvoke Example", 0);
Хотя здесь для функции оболочки задано такое же имя, как и для вызова Windows API, в который она отображается, можно задать для нее и другое имя, как делалось в примере выше. Изменим теперь имя "MessageBox
" на имя, которое более точно определяет, как будет использоваться вызов API. Сделаем это, определяя дополнительное значение в атрибуте sysimport
:
[sysimport (dll="ustr32.dll", name="MessageBoxA") ]
public static extern int ErrorMessage(int Modal, string Message, string Caption, int Options);
При переименовании вызова Windows API таким образом клиенты могут вызывать функцию с новым именем:
ErrorMessage(0, "PInvoke worked!", "PInvoke.Example", 0);
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- 9.4. Права доступа к squid
- Глава 29 Доступ к канальному уровню
- 10.5. Транзакции и пути доступа меню
- Настройка доступа пользователей к рабочей книге
- 3.5 Проблемы доступа при использовании нескольких протоколов
- Доступ к существующим рабочим областям для документов
- Есть ли быстрый способ доступа к папкам?
- Как открыть доступ к своей папке другим пользователям?
- Я открыл доступ к папке
- Как сделать так, чтобы папка на одном компьютере в сети была доступна для другого компьютера, даже если первый выключен?
- Говорят, хакеры могут получить доступ к моему почтовому ящику или ICQ. Как им помешать?