Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


В итоге создается библиотечный файл 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.

Объявление псевдонима внешней сборки

Во втором применении ключевое слово extern предоставляет псевдоним для внешней сборки, что полезно в тех случаях, когда в состав программы включаются две отдельные сборки с одним и тем же именем элемента. Так, если в сборке testl содержится класс MyClass, а в сборке test2 класс с таким же именем, то при обращении к классу по этому имени в одной и той же программе может возникнуть конфликт.

Для разрешения подобного конфликта необходимо создать псевдоним каждой сборки. Это делается в два этапа. На первом этапе нужно указать псевдонимы, используя параметр компилятора /г, как в приведенном ниже примере.

/г:Asml=testl /г:Asm2=test2

А на втором этапе необходимо ввести операторы с ключевым словом extern, в которых делается ссылка на указанные выше псевдонимы. Ниже приведена форма такого оператора для создания псевдонима сборки.

extern alias имя_сборки;

Если продолжить приведенный выше пример, то в программе должны появиться следующие строки кода.

Extern alias Asml; extern alias Asm2;

Теперь оба варианта класса MyClass будут доступны в программе по соответствующему псевдониму.

Рассмотрим полноценный пример программы, в которой демонстрируется применение внешних псевдонимов. Эта программа состоит из трех файлов. Ниже приведен исходный текст, который следует поместить в первый файл — testl.cs.

Using System;

namespace MyNS {

public class MyClass { public MyClassO {

Console.WriteLine("Конструирование из файла MyClassl.dll.");

}

}

}

Далее следует исходный текст из файла test2.cs.

Using System;

namespace MyNS {

public class MyClass { public MyClassO {

Console.WriteLine("Конструирование из файла MyClass2.dll.");

}

}

}

Обратите внимание на то, что в обоих файлах, testl. cs и test2. cs, объявляется пространство имен MyNS и что именно в этом пространстве в обоих файлах определяется класс MyClass. Следовательно, без псевдонима оба варианта класса MyClass будут недоступными ни одной из программ.

И наконец, ниже приведен исходный текст из третьего файла test3.cs, где используются оба варианта класса MyClass из файлов testl. cs и test2. cs. Это становится возможным благодаря операторам с внешними псевдонимами.

// Операторы с внешними псевдонимами должны быть указаны в самом начале файла, extern alias Asml; extern alias Asm2;

Using System;

class Demo {

static void Main() {

Asml::MyNS.MyClass t = new Asml::MyNS.MyClass();

Asm2::MyNS.MyClass t2 = new Asm2::MyNS.MyClass();

}

}

Сначала следует скомпилировать файлы testl. cs и test2. cs в их библиотечные эквиваленты DLL. Для этого достаточно ввести в командной строке следующее.

csc /t:library testl.cs csc /t:library test2.cs

Затем необходимо скомпилировать файл test3.cs, указав в командной строке

csc /г:Asml=testl.dll /г:Asm2=test2.dll test3.cs

Обратите внимание на применение параметра / г, уведомляющего компилятор

О том, что ссылка на метаданные находится в соответствующем файле. В данном случае псевдоним Asml связывается с файлом testl. dll, а псевдоним Asm2 — с файлом test2.dll.





Поделиться с друзьями:


Дата добавления: 2016-12-03; Мы поможем в написании ваших работ!; просмотров: 370 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2349 - | 2104 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.