Team Developer і. NET

Зміст



Введення


Протягом наступних декількох років більшість установ будуть використовувати значну кількість коду 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



Онлайнові служби. 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, то це більш складно і при цьому необхідно більше робити вручну.


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


Файл Dotnet.zip


Системні вимоги:


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


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

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

Ваш отзыв

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

*

*