Опубликован: 11.09.2006 | Уровень: специалист | Доступ: платный
Лекция 5:

Использование библиотек кода в windows-формах

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >

Приложение PDF Reader

В качестве примера вызова COM-компонент создадим приложение, позволяющее просматривать документы в формате PDF. Создайте новое Windows-приложение и назовите его PDF Reader. Добавляем на форму элементы OpenFileDialog и MainMenu. Устанавливаем следующие свойства формы:

Form1, форма, свойство Значение
Text Обозреватель документов в формате PDF
WindowState Maximized

Добавляем пункты меню:

Name Text Shortcut
mnuFile &Файл
mnuOpen &Открыть CtrlО

В окне Toolbox щелкаем правой кнопкой на вкладке Windows Forms, и в появившемся контекстном меню выбираем Add/Remove Items… . В окне Customize Toolbox переключаемся на вкладку COM Components и ставим галочку в чекбоксе компонента Adobe Acrobat 7.0 Browser Document (рис. 5.11).

Добавление компонента  в  окно Toolbox

Рис. 5.11. Добавление компонента в окно Toolbox

Этот компонент появляется после установки программы Adobe Acrobat Reader 7.0. Нажимаем ОК — в окне Toolbox появился новый элемент (рис. 5.12), перетаскиваем его на форму и устанавливаем свойству Dock значение Fill.

Компонент Adobe Acrobat 7.0 Browser Document

Рис. 5.12. Компонент Adobe Acrobat 7.0 Browser Document

Добавляем обработчик пункта меню "Открыть":

private void mnuOpen_Click(object sender, System.EventArgs e)
		{
			openFileDialog1.Filter  = "Файлы pdf|*.pdf";
			openFileDialog1.ShowDialog();
			axAcroPDF1.LoadFile(openFileDialog1.FileName);
		}

Запускаем приложения. При открытии документа в формате pdf происходит, по сути, встраивание в форму интерфейса программы Adobe Acrobat Reader (рис. 5.13):

Результат работы приложения PDF Reader

Рис. 5.13. Результат работы приложения PDF Reader

На диске, прилагаемом к книге, вы найдете приложение PDF Reader. (Code\Glava5\PDFReader).

Генерирование сборок взаимодействия. Утилита tlbimp.exe

.NET-приложения могут использовать COM-классы с ранним или поздним связыванием. При использовании модели раннего связывания информация о типах должна быть известна на этапе компиляции. Для использования COM-типов в управляемом коде необходимо сгенерировать метаданные из библиотеки типов COM-компонента.

Библиотека описания типов COM-компонента может быть независимой от компонента и располагаться в файлах с расширением .tlb, .olb или .ocx. Также описание типов компонента может быть внедрено в качестве ресурса в .exe или .dll файл.

После обнаружения библиотеки описания типов COM-компонента можно приступить к генерации сборки, содержащей метаданные о типе. Это можно сделать с помощью утилиты tlbimp.exe (Type Library Importer). Для ее запуска выбираем Пуск\Все программы\ Microsoft Visual Studio .NET 2003 \ Visual Studio .NET Tools \ Visual Studio .NET 2003 Command Prompt и вводим название утилиты — tlbimp.exe. После генерации метаданных они сохраняются в виде обычной .NET-сборки. Такие сборки называются сборками взаимодействия, поскольку они включают в себя описание COM-компонента и не содержат кода. Утилита tlbimp.exe имеет следующий синтаксис:

Tlbimp TlbFile [/out: name] [/reference: file] [/silent] [/verbose] [/strictref]
[/unsafe][ [/primary]][/publickey: file] [/keyfile: file][/keycontainer: name]

В таблице 5.4 представлено описание некоторых параметров утилиты:

Таблица 5.4. Некоторые параметры утилиты tlbimp.exe
Параметр Описание
/out:filename Указывает адрес, название сборки и пространство имен, содержащее метаданные
/keyfile:filename Параметры для генерирования сборки, подписанной строгим именем
/reference:filename Если компонент ссылается на внешние сборки, то с помощью этого аргумента можно указать адрес файла, в котором необходимо искать внешние типы
/primary Главная сборка взаимодействия для данного типа

Например, для генерирования .NET-сборки myInteropassembly.dll на основании библиотеки activeds.tlb запускаем следующую строку в окне Visual Studio .NET 2003 Command Prompt:

tlbimp c:\Windows\system32\activeds.tlb /out: c:\myInteropassembly.dll

В результате на диске С появится сборка взаимодействия, которую можно будет использовать как частную или публичную (подробнее о сборке в "Создание пакетов установки" ).

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >
Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/

Иван Циферблат
Иван Циферблат
Россия, Таганрог, 36, 2000