Ниже приведен пример кода, объединяющий все это в один блок:

using System.Runtime.InteropServices;

Type objCustomerTableType;

object objCustomerTable;

objCustomerTableType=Type.GetTypeFromProgID('DataAccess.CustomerTable');

objCustomerTable=Activator.CreateInstance(ObjCustomerTableType);

objCustomerTableType.InvokeMember('Delete', BindingFlags, InvokeMethod, null, objCustomerTable, aryInputArgs);

objCustomerTableType = Type.GetTypeFromProgID('DataAccess.CustomerTable');

Хотя средства позднего связывания C# позволяют избежать трудностей RCW, необходимо знать о некоторых, связанных с этим, недостатках.

Первый: позднее связывание может быть опасным. При использовании раннего связывания компилятор может запросить библиотеку типов компонента COM, чтобы убедиться, что все вызываемые на объектах COM методы в действительности существуют. При позднем связывании ничто не препятствует опечатке в вызове метода InvokeMember(), что может породить ошибку во время выполнения.

Второй: позднее связывание может быть медленным. Каждый раз при использовании InvokeMember() на объектной ссылке среда времени выполнения должна найти требуемый член в библиотеке функций класса COM. Это приводит к снижению производительности программы.

Третий: написание кода с поздним связыванием может оказаться трудоемким. Так как не требуется ссылаться на библиотеку типов компонента COM, IDE VS.NET не может использовать Intellisense, чтобы помочь с именами членов и списками аргументов, поэтому в коде могут появиться ошибки, которые будет трудно найти до времени выполнения.

Использование элементов управления ActiveX в .NET

Элемент управления ActiveX является частным типом компонента COM, который поддерживает специальное множество интерфейсов для обеспечения графического представления. Также, как можно импортировать стандартные компоненты COM для использования в проектах .NET, можно также импортировать элементы управления ActiveX. Это позволяет сделать утилита AxImp.exe.

AxImp.exe

Чтобы импортировать компонент ActiveX в среду .NET, утилита AxImp.exe вызывается из командной строки. Команда состоит из двух частей:

1. Имени AxImp.

2. Абсолютного или относительного пути доступа к файлу ActiveX (*.осх), который должен быть импортирован.

Для примера рассмотрим снимок экрана, приведенный ниже. Здесь импортируется элемент управления ActiveX Win32 MAPI и определяется расположение файла .осх (C: windowssystemmsmapi32.осх):

Как можно видеть, программа AxImp.exe выводит два файла.

Первый выходной файл MSMAPI.dll является прокси для сборки. Он позволяет ссылаться на компонент ActiveX, как если бы это был неграфический объект, с помощью его методов и свойств таким же образом, каким используются методы и свойства неграфического класса.

Второй файл AxMSMAPI.dll является элементом управления Windows. Он позволяет использовать графический аспект импортированного элемента управления ActiveX как элемент управления Windows в проектах Forms Windows .NET.

При использовании AxImp желательно убедиться, что для этих двух выходных файлов предоставляются явные и уникальные имена, так как, по крайней мере, в бета-версии SDK .NET AxImp.exe имеет потенциальную возможность перезаписывать входные файлы без предупреждения.

Ссылка на сборку прокси ActiveX

Как сказано выше, вывод сборки прокси утилитой AxImp.exe позволяет ссылаться на компонент ActiveX программным путем без использования графических аспектов. Для этого необходимо просто добавить ссылку на прокси сборки с помощью вкладки Reference в IDE VS.NET после того, как AxImp.exe сделает свою работу:

После создания ссылки на сборку прокси можно использовать в коде программы компонент ActiveX. В примере ниже используется прокси MSMAPI32.осх для отправки почтового сообщения:

public static int Main() {

 MAPISession objSession=new MAPISession();

 MAPIMessages objMessage=new MAPIMessages();

 objSession.Password='password';

 objSession.UserName='[email protected]';

 objSession.SignOn();

 objMessage.SessionID=objSession.SessionID;

 objMessage.Compose();

 objMessage.MsgSubject='MAPI Contol Test';

 objMessage.MsgNoteText='The message body.';

 objMessage.RecipAddress='[email protected]';

 objMessage.ResolveName();

 objMessage.Send(null);

 objSession.SignOff();

 return 0;

}

Размещение элемента управления ActiveX в WinForm

Также достаточно просто разместить элемент управления ActiveX в форме Windows. Чтобы сделать это, сначала запустим диалоговое окно Customize Toolbox из IDE VS.NET, щелкнув правой кнопкой мыши в панели инструментов IDE и выбрав соответствующий пункт в контекстном меню. Когда появится диалоговое окно, надо перейти на вкладку .NET Framework Components и найти созданный утилитой AxImp.exe файл элемента управления Windows. После закрытия диалогового окна Customize Toolbox импортированный элемент управления появится в панели управления IDE и можно будет добавить его в Windows Form таким же образом, каким добавляются любые другие элементы управления Windows.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату