Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
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#.