Для того чтобы объявить метод как внешний, достаточно указать в самом начале его объявления модификаторextern.Таким образом, общая форма объявления внешнего метода выглядит следующим образом.
extern
Обратите внимание на отсутствие фигурных скобок.
В данном варианте ключевое словоexternнередко применяется вместе с атрибутомDll Import,обозначающим библиотеку DLL, в которой содержится внешний метод. АтрибутDll Importпринадлежит пространству именSystem. Runtime . Inter op Services.Он допускает несколько вариантов, но, как правило, достаточно указать лишь имя библиотеки DLL, в которой содержится внешний метод. Вообще говоря, внешние методы следует программировать на С. (Если же это делается на C++, то имя внешнего метода может быть изменено в библиотеке DLL путем дополнительного оформления типов.)
Для того чтобы стало понятнее, как пользоваться внешними методами, обратимся к примеру конкретной программы, состоящей из двух файлов. Ниже приведен исходный код С из первого файлаExtMeth. с,где определяется методAbsMax .
#include
int _declspec(dllexport) AbsMax(int a, int b) {
return abs(a) < abs(b) ? abs(b) : abs(a);
}
В методеAbsMax сравниваются абсолютные значения двух его параметров и возвращается самое большое из них. Обратите внимание на обозначение _declspec (dllexport). Это специальное расширение языка С для программных средств корпорации Microsoft. Оно уведомляет компилятор о необходимости экспортировать метод AbsMax из библиотеки DLL, в которой он содержится. Для компилирования файла ExtMeth. с в командной строке указывается следующее.
CL /LD /MD ExtMeth.с ,
В итоге создается библиотечный файл DLL — ExtMeth .dll.
Далее следует программа на С#, в которой применяется внешний метод AbsMax.
using System;
using System.Runtime.InteropServices;
class ExternMeth {
// Здесь объявляется внешний метод.
[Dlllmport("ExtMeth.dll")]
public extern static int AbsMax(int a, int b);
static void Main {
// Использовать внешний метод, int max = AbsMax(-10, -20);
Console.WriteLine(max);
}
}
Обратите внимание на использование атрибута Dlllmport в приведенной выше программе. Он уведомляет компилятор о наличии библиотеки DLL, содержащей внешний метод AbsMax . В данном случае это файл ExtMeth. dll, созданный во время компиляции файла с исходным текстом метода AbsMax на С. В результате выполнения данной программы на экран, как и ожидалось, выводится значение 20.
Объявление псевдонима внешней сборки