Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 235

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 229 230 231 232 233 234 < 235 > 236 237 238 239 240 241 .. 320 >> Следующая


m-ik Palette sqppc И 1?, Pane Propert Ш Panel Propert—'. S Фь. PANOSE Сон И SgPathBvrClas! а %г pcm ¦ . і Cfcjd - {0JO1660C-e*W-4C40-%I4-3eSI2IC-f3AFIJ M ih ' СЗмтОЇАЄ-3«0TMAAO-A teo-бг I А9№177П\~^)
ч I:
Ready,
Рис. Проверка GUID CCW rep вера при помощи OLE/COM Object Viewer
Теперь давайте рассмотрим, что у нас имеется для самого класса CoC а" с. Помимо информации о методе MdG1 в манифесте содержится также информация о конструкторе этого класса по умолчанию. Это вполне понятно: поскольку RCW представляет СОМ-сервер в виде обычного класса KT. то у этого класса должен быть конструктор. Если мы рассмотрим класс CoCaIc в ILDasm.ехе, то сможем увидеть также информацию о базовом классе для CoCaIc (это будет класс System.Object) и реализованных интерфейсах (_СоСа1 с):
.class public auto ansi Import CoCaIc extends [mscorlib] System.Object implements SіmpleAssemblу._CoCa 1C f
) // Конец информации о CoCalc
Чтобы разобраться, а как же все-таки выглядит представление СОМ-сервера в виде класса .NET, рассмотрим вариант метода MaInC), в котором производится получение информации о СОМ-сервере при помощи членов System. Object и System.Туре:
public static Main(string[] args) {
Il Создаем класс .NET CoCalc CoCalc с - new CoCalcO:
Il Наш СОМ-сервер теперь поддерживает метод System.Object.ToStringO Console.WriteLine<""-> CoCalc to string: {0}". с.ToStringO):
II Извлекаем информацию о типе Type t - С.GetTypeO:
Console.WriteLineC-i-COlvlClass? : {0}", t.IsCOMObject); Console.WriteLine("-> Full name? {0}". t.FullName);
Создаем СОМ-сервер при помощи ATL 583
Console,WrIteLіne("-> CLSID? : {0}". t.GUID.ToStringO): Console. WriteLineC"-> Is it a interface? : {Q}", t. Is Interface):
return 0:
}
Результат выполнения нашей программы представлен на рис. 12.14.
D:\Dacument5 and Settincji\atroeken\Desktop\Chapter 14\ЦгіадцГИ[»)Р
-> CuCdIc to string! PdiiifiillvSinpleUECOnSeroei'.CiiCdlL-
-Э COM class? : True
L> Full папе? : P.iinRill^iriplcUBCOrlSeruci-.CuCdlc -> CLSID? : (Udl<,f,Hc-88dy-4c4H »61*- 365121c43af1 -> Is it a intci'fdec? : Г., I ¦
Press «ту іксу n> sjuniinu«
Рис. 12.14. Получение информации о СОМ-Сфвере
Все. К этому моменту мы уже умеем организовывать взаимодействие между клиентом .NET и СОМ-сервером, используя раннее и позднее связывание. Однако многие важные вещи еще остались нерассмотренными. В следующих разделах мы более глубоко изучим процесс представления СОМ-сервера как типа .Nl:'T и познакомимся с некоторыми особенностями применения утилиты tlbimp.exe.
Создаем СОМ-сервер при помощи ATL
Будем считать, что • • упражнения с созданием СОМ-сервера в Visual Basic были всего лишь разминкой. Чтобы действительно осознать процесс взаимодействия СОМ и .NET, мы создадим еще один СОМ-сервер — на этот раз при помощи ATl.,. Он потребуется нам для того, чтобы мы могли поработать с IDL вручную, разобраться, как будут отображаться в .ЫЕТтакие элементы из мира СОМ, как SAFEARRAi', 3STR, перечисления, соклассыи интерфейсы. Однако я сразу должен оговориться, что эта книга — не руководство по ATL1 хотя в ближайших разделах нам придется шаг за шагом создать СОМ-сервер с его помощью. Если вам нужна дополнительная информация по ATL (и классическому СОМ), рекомендую обратиться к соответствующей литературе (в том числе к моей книге Developer's Workshop to COM andATL 3.0).
Итак, приступим к процессу создания СОМ-сервера с помощью ATL. Нам потребуется открыть Visual С++ 6.0 и воспользоваться шаблоном ATL (в принципе, можно было воспользоваться ATL 4.0 и Visual Studio.NET, однако нам важно показать взаимодействие с унаследованными приложениями, поэтому мы создадим сервер именно в ATL 3.0 и Visual Studio 6.0). Мы назовем новый проект CIa;;-sicATLCOMServer. В меню Insert (Вставка) откроем ATL Object Wizard идобавим новый Simple Object (Простой объект) с именем СоСаг. Далее при помощи вкладки Names (Имена) переименуем исходный ([defaul t])интерфейс в ICar (рис. 12.15). Следующее, что мы должны сделать, — открыть вкладку Attributes (Атрибуты) и выбрать поддержку ISupportErrorlnfo и точек соединения СОМ, поскольку создаваемый
нами сокласс будет уметь посылать сообщения об ошибках и событиях клиенту
.NET(PHC 12.16).
584 Глава 12 • Взаимодействие с унаследованным программным кодом
ATL Ubfi^ i VVVOfТІ Prnpt^ties
Names
ElMt ССоСаг
-HFte. CoCai.h
.C?PFJk CoCai.cpp
JLl.*!]
CCM-
СаОаиі'СоСаг
Іцівг)»
Jjppe: ICoCar Oase PiogjD: jCtassicATLCOMSeiv
Рис. 12.15. Переименовываем интерфейс
AIL ОЬі<:сІ VrVorty Properties
2J *J
Names AttnbUes |
- Threading Modd- - Interface-- -
f Snafa fiual
C Custom
Г fiolh
¦ (~ Еім
¦Aogreoatictr
Г Ho *~ QrJy
у SupportlSuppoilEiioilnlo \ 7 Support Camcli» Poirtj j
Г Free Threaded M*sh»b
OK
Cancel
Рис. 12.16. Устанавливаем поддержку для ошибок и событий СОМ
Кроме того, убедимся, что мы выбрали интерфейс [dual ] вместо предлагаемого по умолчанию Custom. Все остальные параметры должны остаться такими, какими они были установлены по умолчанию. Нажмем OK и приступим к работе.
Предыдущая << 1 .. 229 230 231 232 233 234 < 235 > 236 237 238 239 240 241 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100