Team Developer і. NET, HTML, XML, DHTML, Інтернет-технології, статті

Зміст



Введення


Протягом наступних декількох років більшість установ будуть використовувати значну кількість коду Team Developer, Поряд зі зростаючим обсягом коду.NET. За допомогою виконуваних служб взаємодії .NET можна найкращим чином змусити ці два коди працювати спільно. Це дозволяє писати програми .NET (На зразок VB.NET), Які використовують існуючі COM-Об'єкти Team Developer, А також писати програми Team Developer, Що використовують бібліотеки DLL, створені в VB.NET. Можна створювати додатки .NET, Що збільшують віддачу від вкладень в компоненти COM, І можна переносітьDLL-бібліотеки Team Developer в VB.NET, Продовжуючи при цьому використовувати їх функціональність з додатків Team Developer.



Виконувані компоненти. NET надають пакувальники для взаємодії з технологією COM і обходу відмінностей між. NET і COM


Вплив на продуктивність


Я представлю деякі ключові концепції, що стосуються того, як система впорядковує дані між платформами COM і .NET, І як це впливає на продуктивність. Коли код на будь-який з цих платформ викликає метод об'єкта, який функціонує на іншій платформі, то цей виклик методу вимагає упорядкування (marshalling). У процесі упорядкування пакет служб взаємодії .NET (.NET Interop) Упаковує виклик методу, передає його на іншу платформу, виконує метод, упаковує результати, і потім передає їх назад на початкову платформу (див. Рисунок 1). Коли процес упорядкування переміщує параметри з однієї платформи на іншу, це викликає пікове падіння продуктивності.

Рисунок 1


Це падіння продуктивності сильно залежить від типів даних в параметрах і від результуючих типів. Найкраща продуктивність досягається при переміщенні простих числових даних, таких як 32-розрядні цілі числа. Вони являють собою ізоморфні типи даних, які на обох платформах представляються в пам'яті однаково. Отже, взаємодія з ними відбувається майже так само швидко, як звичайний виклик методу. Можна просто копіювати ізоморфні дані з пам'яті COM в пам'ять .NET (Або навпаки).


Ізоморфними типами даних Team Developer є Number і String. Одномірні масиви ізоморфних типів також ізоморфні, оскільки вони містять тільки ізоморфні типи.


Інші типи даних вимагають більшої роботи в процесі упорядкування, оскільки на платформах .NET і COM вони представляються різним чином. Такі типи даних, як Boolean, є неізоморфних, і можуть вимагати перетворення з одного формату в іншій, а також кількох додаткових циклів в процесі копіювання з однієї платформи на іншу.


Упорядкування


Служби взаємодії з .NET надають чотири типи впорядкування. З них тільки Тип I автоматично підтримується службами взаємодії та Visual Studio .NET (VS.NET). Якщо потрібно перетворити один тип даних в інший, то складні дані треба передавати як єдине значення (таке як Variant), або подати один тип об'єкта як інший об'єкт. Здійснювати інші типи впорядкування необхідно вручну шляхом редагування коду мовою Microsoft Intermediate Language (MSIL) в редакторі Notepad, разом з іншими діями.


При використанні типів даних, які підтримуються Типом I упорядкування, виклик COM-Об'єкта Team Developer з програми VB.NET і навпаки відбувається швидко і практично прозоро. Так що по можливості слід уникати використовувати тип даних Variant, оскільки зазвичай це призводить до проблем. Я покажу Вам, як використовувати Тип I упорядкування, оскільки у своїх додатках Ви, швидше за все, будете використовувати саме цей тип.


Відмінності між. NET Framework і COM Framework


Структура об'єктної моделі .NET і її робота відмінна від компонентної об'єктної моделі (COMCOMponent Object Model) і її функціонування. Наприклад, клієнти компонентів .NET не повинні турбуватися про термін життя свого об'єкта. Спільну мову виконання (CLR – Сommon Language Runtime) бере на себе вирішення подібних проблем. На противагу цьому, клієнти об'єктів COM повинні піклуватися про термін життя свого об'єкта. Аналогічно, об'єкти .NET існують в просторі пам'яті, керованому CLR. CLR може переміщати об'єкти в пам'яті з міркувань продуктивності, і відповідно до цього оновлювати посилання на об'єкти, а клієнти об'єктів COM розташовують реальним адресою об'єкта в пам'яті і розраховують на те, що об'єкт залишиться в тому ж місці пам'яті.


Аналогічно, виконувані компоненти .NET надають багато нових можливостей і конструкцій для керованих компонентів. Наприклад, компоненти .NET можуть мати параметризрвані конструктори, функції компонентів можуть мати пов'язані з ними атрибути доступності (подібно атрибутам публічний (public), захищений (protected), внутрішній (internal), і тощо), а компоненти можуть також мати статичні методи. Поряд з цими можливостями, є ще й багато інших. Серед них є й недоступні для клієнтів COM, Оскільки стандартна реалізація COM не розпізнає ці функції. Тому виконувані компоненти .NET повинні привнести щось, що діє як посередник між сервером .NET і клієнтом COM.


Посередник між. NET і COM


Виконувані компоненти .NET надають пакувальники для взаємодії з технологією COM і обходу відмінностей між середовищами .NET і COM. Наприклад, коли клієнт .NET отримує доступ до об'єкту COM, Що виконується компонент створює екземпляр викликається пакувальника COM (CCW – Com Callable Wrapper). Точно також при доступі клієнта .NET до компоненту COM створюється екземпляр виконуваного викликається пакувальника (RCW – Runtime Callable Wrapper). Ці пакувальники абстрагують відмінності і надають зручну інтеграцію двох середовищ. Рисунок 2 ілюструє CCW і RCW.

Рисунок 2


Частина I. Використання коду Team Developer з VB. NET



VS.NET автоматично створює скомпонований блок (assembly) виконуваного викликається пакувальника (RCW)


VS.NET дозволяє використовувати і посилатися на DLL-бібліотеки COM дуже схоже на те, як використовують і посилаються на DLL-бібліотеки .NET. Почніть із створення простої DLL-бібліотеки COM в Team Developer, Як показано на рисунку 3.

Рисунок 3


Після створення проекту Ви отримаєте просту DLL, яка повертає текстове значення. Цю DLL можна прозоро використовувати з .NET, Оскільки Тип I упорядкування підтримує обидва типи даних.


Перед використанням будь-якої DLL в VB.NET необхідно додати в проект посилання на неї. Це вірно для DLL як .NET, Так і COM, І VS.NET дозволяє додавати посилання на обидва типи DLL з одного діалогового вікна.


В VS.NET для виклику діалогового вікна Add Reference (Додати посилання) використовується пункт меню Project / Add Reference (Проект / Додати посилання). Клацніть закладку COM, Після чого з'явиться список всіх компонентів COM, Зареєстрованих в даний момент в системі. Прокрутіть список і виберіть позицію COMObject (див. Рисунок 4).

Рисунок 4


Після натискання на ОК VS.NET автоматично створює скомпонований блок виконуваного викликається пакувальника (RCW). Цей важливий етап відбувається у фоновому режимі. RCW є скомпоновані блоком .NET, Який для коду .NET виглядає багато в чому так само, як DLL-бібліотека COM. Код, який викликає компонент COMObject, насправді викликає RCW, який потім викликає від Вашого імені нижележащие компоненти COM. RCW піклується про процес упорядкування, здійснюючи реальний виклик з платформи .NET платформи COM. Він також може дозволити спільно використовувати компоненти COM серед декількох додатків .NET.


Додайте у форму керуючі елементи TextBox (Текстове вікно) і Button (Кнопка), потім для виклику коду вікна двічі клацніть на керуючому елементі Button. Додайте цей код всередину події Click (Клацання):


Даний код створює екземпляр компонента COMObject, а потім для заповнення дисплея викликає метод. Потім цей код викликає Marshal.ReleaseCOMObject, щоб звільнити посилання на нижележащий COM-Об'єкт. Ви робите те ж саме при виклику Object.Release () в Team Developer, Оскільки COM-Об'єкти знищуються при їх звільненні, і вони чекають звільнення після того, як їх використали.


З іншого боку, об'єкти в VB.NET не знищуються до тих пір, поки алгоритм "збору сміття" в .NET не дійде до них. Виклик ReleaseCOMObject змушує .NET більш близько імітувати поведінку платформи COM – Це хороша ідея при роботі з об'єктами COM.


Перед тим, як цей код запрацює, потрібно додати в початок файлу оператор Imports:


Таким чином, створюється простір імен для розміщення класу Marshal.


Тепер можна запустити програму і натиснути на кнопку. Потім форма відобразить дані, отримані від DLL-бібліотеки COM в Team Developer (Див. Рисунок 5).

Рисунок 5


Частина II. Використання скомпонованих модулів VB. NET з Team Developer



Cлужба. NET Interop надають простий спосіб повторно використовувати існуючі в Team Developer об'єкти COM з VB.NET, а також використовувати DLL-бібліотеки VB.NET з Team Developer


Це майже так само просто, як зворотний процес. Звичайно, без Вашого втручання заснований на технології COM клієнт, такий як додаток Team Developer, Не зможе використовувати бібліотеки VB.NET. Для цього треба зробити декілька кроків.


Створіть у VS.NET новий проект Class Library (Бібліотека класів) під назвою ManagedClass. Приберіть код шаблону з файлу Class1.VB і потім впишіть наведений далі код, а потім перейменуйте Class1.VB в ManagedClass.VB:


Даний код надає ту ж саму функціональність, що і DLL-бібліотека COM, Створена Вами раніше для того, щоб вона була доступна в Team Developer. Використовуйте атрибут <InterfaceTypeAttribute()> для того, щоб позначити керований INETInterface як тільки IDispatch після того, як він стане доступний в COM.


Звичайно, для ідентифікації Вашого класу COM покладається на глобальні унікальні ідентифікатори (GUID – globally unique identifier). Якщо Ви їх не позначите, то .NET автоматично створить деякі з них.


Необхідно помітити і сам проект, щоб зареєструвати в VS.NET бібліотеку DLL з COM. Клацніть правою кнопкою миші на проекті ManagedClass в Solution Explorer і виберіть Properties (Властивості). Клацніть на Configuration Properties (Властивості настройки) і Build (скомпонувати) в лівій панелі, і перевірте опцію під назвою Register for COM Interop (Зареєструвати для взаємодії з COM) (Див. Малюнок 6).

Малюнок 6


При включенні цієї опції в наступний раз при компонуванні рішення VS.NET створить COM-Викликається пакувальник (CCW – COM-callable wrapper) і бібліотеку типу COM для Вашого класу. VS.NET також реєструє DLL в реєстрі Windows, роблячи їх доступними в для Team Developer. Все це відбувається непомітно – єдиною видимою індикацією є лінія у вікні Output.


CCW має схожість з RCW, який був створений раніше в VS.NET. Цей скомпонований модуль управляє упорядкуванням і всіма відомостями, які дозволяють клієнтського додатку COM використовувати об'єкт VB.NET. Скомпонуйте проект для створення DLL, потім відкрийте середу розробника Team Developer IDE.


Збережіть проект як .NETClient.apt. Відкрийте ActiveX Explorer і знайдіть компонент ManagedClass. Можна згенерувати SAL-представник, подібно тому, як це робиться для будь-якого компонента COM (Див. Малюнок 7).

Малюнок 7

Тепер додайте Common Language Runtime Library.apl в розділ Libraries (Бібліотеки). Створіть нове вікно форми (Form Window) і додайте туди поле даних (Data Field) і кнопку (Pushbutton). Створіть примірник INETInterface і додайте до Pushbutton наступний код:


Нарешті, запустіть програму і натисніть на кнопку. На дисплеї повинно з'явитися значення, отримане від скомпонованого модуля VB.NET (Див. Малюнок 8).

Малюнок 8


Резюме


Ось що необхідно зробити для отримання доступу до компонентів .NET з некерованого коду. Якщо Ви хочете розробляти деякі з компонентів свого застосування в .NET, То Вам необхідно врахувати, що багато можливостей компонентів .NET недоступні клієнтам COM. Це зажадає деяких рішень в період проектування і може вплинути на спосіб проектування ієрархії об'єктів (оскільки ієрархія наслідування компонентів .NET для клієнтів COM представляється більш плоскою).


Служби .NET Interop надають корисний і зазвичай нескладний спосіб повторно використовувати існуючі COM-Об'єкти Team Developer з VB.NET, І використовувати DLL-бібліотеки VB.NET з Team Developer під час міграції компонентів. У більшості випадків служби Interop роблять за Вас всю важку роботу, а VS.NET часто автоматизує цей процес. Якщо Ви створюєте багатопотокові .NET-Додатки або передаєте складні типи даних через тип даних Variant, то це більш складно і при цьому необхідно більше робити вручну.


Завантаження вихідного коду


Файл

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Метки: , , , , , ,
Рубрики: DHTML, HTML, XML

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*