Поделиться через


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

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

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

Можно также использовать ключевое extern слово для определения псевдонима внешней сборки. С помощью этого псевдонима можно ссылаться на разные версии одного компонента из одной сборки. Дополнительные сведения см. в разделе Псевдоним extern.

Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.

Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.

Подсказка

Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.

Это ошибка совместного использования абстрактных и extern модификаторов для изменения одного и того же элемента. extern Использование модификатора означает, что метод реализуется за пределами кода C#, в то время как использование abstract модификатора означает, что реализация метода не предоставляется в классе.

Ключевое extern слово имеет более ограниченное использование в C#, чем в C++. Чтобы сравнить ключевое слово C# с ключевым словом C++, см . статью "Использование экстерна для указания компоновки " в справочнике по языку C++.

В этом примере программа получает от пользователя строку и отображает ее в окне сообщения. В этой программе используется метод 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);
    }
}

В этом примере показана программа C#, в которой вызывается библиотека C (собственная библиотека DLL).

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

    // cmdll.c
    // Compile with: -LD
    int __declspec(dllexport) SampleMethod(int i)
    {
      return i*10;
    }
    
  2. Откройте окно командной строки собственных средств Visual Studio x64 (или x86) из каталога установки Visual Studio и скомпилируйте 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));
        }
    }
    
  4. Откройте окно командной строки собственных средств Visual Studio x64 (или x86) из каталога установки Visual Studio и скомпилируйте файл, введя следующее cm.cs :

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

    Эта команда создает исполняемый файл cm.exe.

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

    SampleMethod() returns 50.
    

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

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

См. также