Недавно я работал над проектом, в котором использовалась dll vc, но ее нужно было вызывать в .net. Я изучал, как вызывать неуправляемую dll в С#.
Давайте сначала представим файл dll
1.Dll-файл
Библиотека динамической компоновки (также называемая DLL, сокращение от «Библиотека динамической компоновки») — это один из наиболее важных компонентов Microsoft Windows. Откройте системную папку Windows, и вы обнаружите, что в ней находится множество файлов DLL. основные функции системы реализованы в виде модулей DLL.
Библиотека динамической компоновки не может быть запущена напрямую и не может получать сообщения. Это просто независимый файл, содержащий функции (методы), которые могут вызываться программами или другими DLL для выполнения определенных операций. Примечание. В C# обычно называется «методами». ) , но эти функции не являются частью самой программы выполнения, а загружаются по требованию в соответствии с потребностями процесса и могут играть роль только в это время.
DLL загружается системой в виртуальное пространство процесса только тогда, когда это необходимо приложению, и становится частью вызывающего процесса. В это время доступ к DLL возможен только из потока процесса, и ее дескриптор может быть доступен. использоваться вызывающим процессом, а вызывающий процесс. Дескриптор процесса также может использоваться DLL. В памяти DLL имеет только один экземпляр, и ее подготовка не имеет ничего общего с конкретным языком программирования и компилятором, поэтому программирование на смешанном языке может быть достигнуто с помощью DLL. Любые объекты (включая переменные), созданные кодом внутри функции DLL, принадлежат потоку или процессу, который их вызывает.
2. Вызов DLL
Каждый язык программирования имеет разные методы вызова DLL. Здесь мы только представляем метод вызова DLL с использованием C#. Во-первых, нужно понять, что является управляемым, а что неуправляемым. Вообще говоря, можно подумать, что неуправляемый код — это в основном компоненты DLL и ActiveX, разработанные на базе платформы win 32, тогда как управляемый код разрабатывается на основе платформы .net.
(1) Общий метод вызова неуправляемых функций в DLL.
Во-первых, внешний метод должен быть объявлен в исходной программе на языке C#. Его основная форма:
[DLLImport("DLL-файл")]
Модификатор extern возвращает имя метода типа переменной (список параметров)
в:
Файл DLL: содержит файл библиотеки, определяющий внешние методы.
Модификаторы: модификаторы доступа, модификаторы, отличные от абстрактных, которые можно использовать при объявлении методов.
Тип возвращаемой переменной: тип возвращаемой переменной метода, который необходимо вызвать в файле DLL.
Имя метода: имя метода, который необходимо вызвать в файле DLL.
Список параметров: список методов, которые необходимо вызвать в файле DLL.
Примечание. В объявлении программы необходимо использовать пространство имен System.Runtime.InteropServices.
DllImport можно размещать только в объявлениях методов.
Файл DLL должен находиться в текущем каталоге программы или в пути запроса, определенном системой (т. е. в пути, заданном параметром Path в переменной системной среды).
Тип возвращаемой переменной, имя метода и список параметров должны соответствовать определениям в файле DLL.
Если вы хотите использовать другие имена функций, вы можете использовать настройку свойства EntryPoint, например:
[DllImport("user32.dll", EntryPoint="MessageBoxA")]
static extern int MsgBox(int hWnd, строка msg, заголовок строки, тип int);
Другие необязательные атрибуты DllImportAttribute:
CharSet указывает набор символов, используемый в точке входа, например: CharSet=CharSet.Ansi;
SetLastError указывает, сохраняет ли метод «последнюю ошибку» Win32, например: SetLastError=true;
ExactSpelling указывает, должно ли EntryPoint точно соответствовать написанию указанной точки входа, например: ExactSpelling=false;
PreserveSig указывает, следует ли сохранить или преобразовать подпись метода, например: PreserveSig=true;
CallingConvention указывает соглашение о вызовах точки входа, например: CallingConvention=CallingConvention.Winapi;