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

 

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

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

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

> .custom Instancevold [mscorlibJSyslem.Runtjr
> .custom instance void |mscorlib]Sysiern.Runtir і • .ctor: vcioO ¦ Add Intl6(lnil6.intl6)
в tt _CoCalc
» xlass interface public abstract auto ansi impoi
> custom instance void [mecortibJSystem.Runtlr-... > .custom Instancevoid lmscorllb]System.Runtlr
> .custom Instancevoid (mscorliblSyslem.Runtlri' _I
.assembly SimpleAssembly
{ _ _
Рис. 12.8. Типы созданной нами сборки
D

шіим.і^миди!иядн.іт—rf i и
"'3J 5оЫип 'CShsrpCilcCllerf (1 project) E UP CsharpCakCllent
3-
SmpleAsseriibly
References
•a I
<c System •O System.Data - •OSystem.»! g| Aeemblytnfo.cs O CafcCient.es
Vt...
Рис. 12.9. При создании клиента .NLT должна быть добавлена ссылка на промежуточную сборку
578 Глава 12 • Взаимодействие с унаследованным программным кодом
Раннее связывание сСОМ-классом CoCalc
Мы уже добавили прямую ссылку на созданную нами сборку SimpleAssembLy.dLI. и поэтому можем воспользоваться простым ранним связыванием. В приведенном ниже коде обратите внимание, что для клиента С# CoCa 1 с — это обычный тип .NET, для обращения к которому ничего специального не требуется. В действительности же, конечно, запросы с CoCaIc будут передаваться SimpleAssembly COM-серверу.
namespaceCShan)CalcC' lent
[
using System;
Il Добавим для упрощения доступа к CoCaIc using SimpleAssembly:
public class CalcClient {
public static int Main(string[] args) {
II Создаем объект CoCalc CoCalc с = new CoCalcO:
Il Производим операции с числами через СОМ-сервер Console.WriteLine("30 + 99 is: " + c.Add(30. 99));
return
}
}
Как мы видим, все члены интерфейса по умолчанию ([defaul t Jj сокласса представляются напрямую как члены класса CoCalc. Если нам потребуется явно обратиться к какому-либо интерфейсу, это можно сделать при помощи следующего
кода (мы будем обращаться к тому же_СоСа1с):
public class CalcClient {
public static int Main(stnr,g[] args) {
II Создаем объект CoCalc CoCalc с = new CoCaIс():
Il Явный образом получаем ссылку на интерфейс _CoCalc icalc - с:
Console.WriteLine("icalc.Add(9. 80));
return 0:
}
}
Код приложения CSharpCalcClient можно найти в подкаталоге Chapter 12.
Раннее связывание при помощи Visual Studio.NET
Надо сказать, что все можно сделать и проще — как обычно, средствами Visual Studio.NET. Среда разработки позволяет нам просто добавить СОМ-сервер при помощидиалогового окнаAdd Reference (Добавить ссылку) (рис. 12.10).
Добавление ссылки на сборку 579
,l,:4 Reference
.ГОframework "COM : projects j
Component Name
1 Version ¦
I Path
1-І
OptsKoW 1.0 Type Library 5.50.1522,..,
Packageand Deployment Wis, ,. 6,0,0.8450
Package and Depbyment №, ,. 6.0.0.8450
Package and Deployment WU... 4.0.0.9450
"PageNamar DTC LOType Lib... 1.0.0.0
I PainMySimptoveCOMServer 1.0.0.0
¦ PDCubel .OTypeLfcrery 7,0.1073.1... - j PDCube 2.0 Type Library B.0.1.94
:• Performance Logs and Alerts... S.0,2163.1
¦ Preview 1.0 Type Library 5.0.2134.1 proctexe 1 .OType Lbrary 6.2.45Z2.1...
IPrnrwfvTrml ,пТтеІЬліч Я.Л.717Я.1
O^WINNT^SystemSZ^trehtml... Deprogram F«ei\Microscft Vi... Program FlesiMkrosoftVI... ОЛРтодгат Fles^Mcrasoft Vi... Oi\Program Fles\Common Fl... D;\CSharpBoek\LabalChepter... D^Program FJes\Ccwnmon Fl... D.\Prooram fiies^Common Fi.,, 0:\WINNT\5ysterr,32bmlogcf.., Di\WINNrV5yjeem3Z\shirngv.,. D:iwirNlVSystem32\proctaj(... ;i-;.-^.r,i-,-..,t,.. ¦¦¦,¦¦,-, , . ..
;5elected Components:
Cornpanent Heme
I Type
?a rif(ju-Sini!;J"VBCOMS?rv«r
o KSrmpBni H!.!'.!.''i'r,,;,i.|
Browse... j
s?ta
OK
Cancel
Рис. 12.Ю. Обращение к СОМ-серзєру средствами Visual Studio.NET
В этом случае все будет сделано автоматически: будет вызвана утилита tibi mp.exc, которая создаст новую сборку в каталоге Debug (или Release), и ссылка на эту сборку будет добавлена в проект. В оставшейся части этой главы мы будем пользовать -ся для скорости именно графическими средствами Visual Studio.NET.
Позднее связывание с соклассом CoCalc
Мы уже обсуждали в главе 7, что в пространстве имен System. Ref ecti on прєдусмо трены способы получения информации о типах сборки непосредственно во время выполнения. В мире СОМ аналогичные возможности реализуются при помощи набора стандартных интерфейсов (ITypeLib, ITypelnfo и т. д.). Связывание клиента с СОМ-сервером во время выполнения программы (в противоположность связыванию во время компиляции) называется поздним связыванием.
Прежде всего нужно сказать, что когда у нас есть выбор между ранним и по здним всегда следует выбирать раннее. Однако в некоторых
циях без позднего связывания не обойтись. Например, некоторые унаследованные СОМ-серверы устроены таким образом, что они вообще не предоставляют никакой информации о типах. В этом случае утилита tlbimp.exe и модули RCW будут совершенно бесполезны. Однако способы организации взаимодействия .NET-клнентов и СОМ-серверов существуют и для такого случая. Мы должны организовать такое взаимодействие при помощи позднего связывания и типов ш пространства имен System,Ref ecti on.
Процесс позднего связывания начинается с получения клиентом от сокласса ссылки на интерфейс IDispatch. Этот стандартный интерфейс СОМ определяет четыре метода, два из которых нам интересны в настоящий момент. Первый ме-
Предыдущая << 1 .. 227 228 229 230 231 232 < 233 > 234 235 236 237 238 239 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100