Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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).
Создайте следующий файл C и назовите его
cmdll.c.// cmdll.c // Compile with: -LD int __declspec(dllexport) SampleMethod(int i) { return i*10; }Откройте окно командной строки собственных средств Visual Studio x64 (или x86) из каталога установки Visual Studio и скомпилируйте
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 x64 (или x86) из каталога установки Visual Studio и скомпилируйте файл, введя следующее
cm.cs:csc cm.cs (для командной строки x64) или csc -platform:x86 cm.cs (для командной строки x86)
Эта команда создает исполняемый файл
cm.exe.Запустите
cm.exe. МетодSampleMethodпередает значение 5 в файл DLL, который возвращает значение, умноженное на 10. Программа выдает следующие результаты.SampleMethod() returns 50.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.