Модификатор extern
У метода с extern нет блока с телом в C#.
Для вызова из неуправляемого кода обычно
добавляют DllImport с именем библиотеки.
В примере ниже метод только объявлен -
программа его не вызывает, чтобы не
загружать нативную DLL при запуске.
Синтаксис
[DllImport("имя_библиотеки")]
public static extern тип Метод(параметры);
Пример
Давайте объявим extern метод и выведем текст из Main:
using System;
using System.Runtime.InteropServices;
class NativeApi
{
[DllImport("mylib")]
public static extern int Compute(int value);
}
class Program
{
static void Main()
{
Console.WriteLine("12345");
}
}
Результат выполнения кода:
"12345"
Пример
Давайте объявим несколько extern методов в одном классе:
using System;
using System.Runtime.InteropServices;
static class Bridge
{
[DllImport("mylib")]
public static extern void Init();
[DllImport("mylib")]
public static extern void Close();
}
class Program
{
static void Main()
{
Console.WriteLine("abcde");
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте сочетаем управляемый код и объявление extern:
using System;
using System.Runtime.InteropServices;
class App
{
[DllImport("mylib")]
private static extern double Transform(double input);
public static string GetLabel()
{
return "done";
}
}
class Program
{
static void Main()
{
Console.WriteLine(App.GetLabel());
}
}
Результат выполнения кода:
"done"