extern (справочник по C#)

Модификатор extern используется для объявления метода с внешней реализацией. При применении служб взаимодействия для вызова неуправляемого кода модификатор extern обычно используется с атрибутом DllImport. В этом случае также необходимо объявить метод как static в соответствии со следующим примером:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

Ключевое слово extern может также определять внешний псевдоним сборки, который позволяет ссылаться на разные версии одного компонента из одной сборки. Дополнительные сведения см. в разделе Псевдоним extern (Справочник по C#).

Совместное использование модификаторов 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).

1. Создайте следующий файл C и назовите его cmdll.c.

// cmdll.c
// Compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
   return i*10;
}

2. Откройте из каталога установки Visual Studio окно командной строки Visual Studio x64 (или x32) Native Tools и скомпилируйте файл cmdll.c, введя в командной строке cl /LD cmdll.c.

3. В том же каталоге создайте следующий файл 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));
   }
}

3. Откройте из каталога установки Visual Studio окно командной строки Visual Studio x64 (или x32) Native Tools и скомпилируйте файл cm.cs, введя:

csc cm.cs (для командной строки x64) —или—csc /platform:x86 cm.cs (для командной строки x32)

При этом будет создан исполняемый файл cm.exe.

4. Запустите cm.exe. Метод SampleMethod передает значение 5 в файл DLL, который возвращает значение, умноженное на 10. Программа выдает следующий результат:

SampleMethod() returns 50.

Спецификация языка C#

Дополнительные сведения см. в Спецификация языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также

Ссылки

Ключевые слова C#

Модификаторы (Справочник по C#)

DllImportAttribute

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Справочник по C#