extern (справочник по C#)
Модификатор extern
используется для объявления метода с внешней реализацией. При применении служб взаимодействия для вызова неуправляемого кода модификатор extern
обычно используется с атрибутом DllImport
. В этом случае также необходимо объявить метод как static
в соответствии со следующим примером:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
Ключевое слово extern
может также определять внешний псевдоним сборки, который позволяет ссылаться на разные версии одного компонента из одной сборки. Дополнительные сведения см. в разделе Псевдоним extern.
Совместное использование модификаторов abstract и extern
для изменения одного члена недопустимо. Использование модификатора extern
означает, что метод реализуется вне кода C#, а применение модификатора abstract
указывает на то, что в данном классе реализация метода не обеспечивается.
В C# ключевое слово extern имеет более ограниченное применение, чем в C++. Сравнительные характеристики использования этого ключевого слова в C# и в C++ см. в разделе "Использование extern для указания компоновки" Справочника по языку C++.
Пример 1
В этом примере программа получает от пользователя строку и отображает ее в окне сообщения. В этой программе используется метод MessageBox
, импортированный из библиотеки User32.dll.
//using System.Runtime.InteropServices;
class ExternTest
{
[DllImport("User32.dll", CharSet=CharSet.Unicode)]
public static extern int MessageBox(IntPtr h, string m, string c, int type);
static int Main()
{
string myString;
Console.Write("Enter your message: ");
myString = Console.ReadLine();
return MessageBox((IntPtr)0, myString, "My Message Box", 0);
}
}
Пример 2
В этом примере показана программа C#, в которой вызывается библиотека C (собственная библиотека DLL).
Создайте следующий файл C и назовите его
cmdll.c
.// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }
Откройте из каталога установки Visual Studio окно командной строки Visual Studio x64 (или x32) Native Tools и скомпилируйте файл
cmdll.c
, введя в командной строке cl -LD cmdll.c.В том же каталоге создайте следующий файл C# и назовите его
cm.cs
.// cm.cs using System; using System.Runtime.InteropServices; public class MainClass { [DllImport("Cmdll.dll")] public static extern int SampleMethod(int x); static void Main() { Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5)); } }
Откройте из каталога установки Visual Studio окно командной строки Visual Studio x64 (или x32) Native Tools и скомпилируйте файл
cm.cs
, введя:csc cm.cs (для командной строки x64) — или — csc -platform:x86 cm.cs (для командной строки x32)
При этом будет создан исполняемый файл
cm.exe
.Запустите
cm.exe
. МетодSampleMethod
передает значение 5 в файл DLL, который возвращает значение, умноженное на 10. Программа выдает следующие результаты.SampleMethod() returns 50.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.