Перенесення рішень із платформи. Net на платформу com 2006 Зміст


НазваПеренесення рішень із платформи. Net на платформу com 2006 Зміст
Дата конвертації09.04.2013
Розмір445 b.
ТипПрезентации


Перенесення рішень із платформи .NET на платформу COM

  • 2006


Зміст

  • Ключова проблема.

  • Схема зв'язування COM-проектів з .NET-об'єктами. Обгортка CCW.

  • Експортування .NET-збірок:

    • обмеження на .NET-збірки, призначені до експортування;
    • Mscoree.dll та механізм створення COM-об'єктів;
    • експортовані кокласи та службові інтерфейси;
    • атрибут ClassInterface;
    • експортування .NET-класу з “власним” інтерфейсом.
  • Деякі атрибути, що впливають на імпортування бібліотек типів у .NET.



Ключова проблема

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

  • Отже, ключовою виглядає наступна проблема:

      • Чи можна, а якщо можна, то як саме експортувати .NET-об'єкти у COM?
  • Microsoft надає інструментальні засоби такого експортування (на рівні збірок), генеруючи за існуючими класами та інтерфейсами у .NET кокласи (вони відіграють у роль proxy ) та інтерфейси COM.



Схема зв'язувань COM-проектів з .NET-об'єктами. Обгортка CCW

  • Обгортка COM Callable Wrapper (CCW), по-перше, емулює деякі стандартні COM-інтерфейси, а також службові інтерфейси _object та _Ім'яЕкспортованогоКласу), забезпечуючи реалізацію викликів методів зазначених інтерфейсів, і, по-друге, відповідає за маршалінг даних між двома середовищами COM та .NET.



Обгортка CCW



Обмеження на зв'язування з .NET-об'єктами

  • Звертатись до компонента-збірки .NET “ззовні” (у даному випадку із COM-середовища за посередництвом CCW) можна тільки у випадку, коли збірка міститься у GAC (Global Assembly Cache - глобальному кеші збірок). У свою чергу розміщення у GAC вимагає використовувати для збірок строгі імена.

  • Отже, первісними задачами на шляху до реалізації зв'язувань з .NET-об'єктами є наступні:

    • забезпечити підписання .NET- збірки строгим іменем;
    • занести підписану строгим іменем збірку у GAC.


Збірка та інші ключові терміни .NET

  • Збірка є базовою одиницею .NET Framework (при розгортанні, керуванні версіями тощо) і являє собою логічне об'єднання файлів. Один із файлів збірки містить маніфест (manifest), де представлена інформація про збірку в цілому, зокрема про файли, що входять до збірки.

  • Складені з байт-коду (байт-коду .NET відповідає мова рівня асемблера CIL Common Intermediate Language, загальна проміжна мова) та метаданих керовані модулі збірки виконуються у середовищі CLR (Common Language Runtime — загальномовне середовище виконання) шляхом використання just-in-time компіляції у машинний код (не інтерпретації, як у випадку віртуальної Java-машини). (Загалом, середовище CLR можна розглядати як віртуальну .NET-машину, про що, до речі, свідчить його початкова назва Virtual Execution System).

  • Наявність метаданих у модулях є засадами інтеграції:

    • міжмовна інтеграція у .NET;
    • інтеграція збірок як .NET-компонент.


Строгі імена збірок

  • Строге ім'я складається із символьного імені, версії, регіональної інформації та маркера відкритого ключа (PublicKeyToken), наприклад,

  • Name=Some, Version=1.2.0.0, Culture=neutral,

  • PublicKeyToken=672eb6fe2413d741.

  • 8-байтний маркер відкритого ключа є хешем (контрольною сумою) відкритого ключа (відкритий ключ міститься у самій збірці). Маркер був уведений для того, щоб скоротити ідентифікацію збірок.

  • Приклад. Основною збіркою загальної бібліотеки класів .NET є mscorlib.dll (mscorlib – це скороченням від Multilanguage Standard Common Object Runtime Library – багатомовна стандартна загальна бібліотека об'єктів часу виконання). У маніфестах розроблюваних збірок посилання на mscorlib, як на зовнішню збірку, виглядає наступним чином:

  • .assembly extern mscorlib

  • {

  • .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..

  • .ver 1:0:3300:0

  • }



Маніфест збірки NET_s_inproc.dll.. (Перегляд в ildasm.exe)

  • Загалом, у маніфестах розроблюваних збірок посилання на mscorlib, як на зовнішню збірку, виглядає наступним чином:

  • .assembly extern mscorlib

  • {

  • .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..

  • .ver 1:0:3300:0

  • }



Експортування .NET-збірок

  • 1. Створити пару криптографічних ключів (відкритого й закритого), якими буде підписуватись компонент-збірка:

  • snk mykeys.snk

  • (Ключі будуть записані у файл mykeys.snk.)

  • 2. Створити строго іменовану збірку.

  • У C# коді шляхом використання атрибуту AssemblyKeyFile визначається, що компілятор повинен підписати збірку ключами із заданого файлу.

  • Приклад:

  • [assembly: AssemblyKeyFile("mykeys.snk")]

  • Далі використовується звичайна компіляція:

  • csc /target:library ExportToCom.cs

  • Інший варіант (без змін у C# коді, з використанням утиліти-компоновника assembly linker):

  • csc /target:module ExportToCom.cs

  • al /out: ExportToCom.dll /keyfile:mykeys.snk

  • ExportToCom.netmodule



Експортування .NET-збірок (прод.)

  • 3. Занести строго іменовану збірку у GAC:

  • gacutil /i ExportToCom.dll.

  • 4. Експортувати строго іменовану збірку (з отриманням бібліотеки типів COM) та, при потребі, здійснити реєстрацію у системному реєстрі Windows.

  • Для експортування збірки:

  • tlbexp ExportToCom.dll /out:ExportToCom.tlb

  • Для здійснення одразу експортування збірки та реєстрації у системному реєстрі отримуваної бібліотеки типів COM :

  • regasm /tlb:ExportToCom.tlb ExportToCom.dll.



Створення криптографічних ключів



GAC (Global Assembly Cache - глобальний кеш збірок). (“Оболонка” Windows Explorer )



Властивості ExportToCom.dll (Windows Explorer, ПКМ)



Приклад. (Файл ExportToCom.cs)

  • // Файл ExportToCom.cs

  • using System;

  • using System.Windows.Forms;

  • using System.Reflection;

  • [assembly: AssemblyKeyFile("mykeys.snk")]

  • public class My_NETClass

  • {

  • public void My_Message(String param)

  • {

  • MessageBox.Show(param,

  • "My_NETClass::My_Message - this method was invoked");

  • }

  • };





Експортована бібліотека типів ExportToCom.tlb (вигляд в Oleview.exe)

  • public class My_NETClass

  • {

  • public void My_Message(String param)

  • {

  • . . .

  • }

  • };



Реєстрування ExportToCom.tlb. (Перегляд Regedit.exe)



Приклад клієнтської програми



Атрибут ProgId

  • Приклад (фрагмент файлу ExportToCom2.cs):

  • public interface IMy_NETClass

  • {

  • void My_Message(String param);

  • };

  • [ ProgId("unicyb.kuzenko.FunnyWorld"),

  • // атрибут ProgId дозволяє перестрахуватись від

  • // можливої колізії імен

  • ClassInterface(ClassInterfaceType.AutoDual)]

  • public class My_NETClass : IMy_NETClass

  • {

  • public void My_Message(String param)

  • {

  • MessageBox.Show(param,

  • "My_NETClass::My_Message method was invoked");

  • }

  • };



Mscoree.dll та механізм створення експортованих COM-об'єктів

  • Mscoree.dll є завантажувачем віртуальної машини .NET, проте з погляду COM – це звичайний InprocServer (він експортує чотири традиційні для InprocServer функції: DllGetClassObject,DllCanUnloadNow, DllRegisterServer, DllUnregisterServer).

  • Механізм створення експортованого з .NET COM-об'єкта, наприклад, типу (кокласу) My_NETClass виглядає наступним чином.

  • По-перше, завантажується “приписаний” у реєстрі до цього кокласу InprocServer. Важливо, що для будь-якого експортованого COM-об'єкту це буде один і той же dll-файл Mscoree.dll завантажувач віртуальної машина .NET, а отже, здійснюється "перехід" до середовища виконання .NET.



Mscoree.dll та механізм створення експортованих COM-об'єктів (прод.)

  • По-друге, викликається функція DllGetClassObject з InprocServer Mscoree.dll (уже у середовищі .NET). Реалізація ж DllGetClassObject здійснена таким чином, що, використовуючи інформацію з системного реєстру Windows, середовищем виконання .NET здійснюється наступне:

    • створюється COM об'єкт-proxy (у даному прикладі за кокласом My_NETClass);
    • завантажується потрібна збірка з GAC (визначається за ключем Assembly реєстру);
    • створюється.NET-об'єкт (його тип визначається за ключем Class реєстру);
    • створюється обгортка CCW;
    • налагоджуються необхідні зв'язки між CCW та двома створеними об'єктами (proxy у некерованому коді та .NET-об'єктом у керованому).


Експортована бібліотека типів ExportToCom.tlb (вигляд в Oleview.exe). Кокласи та службові інтерфейси

  • public class My_NETClass { . . .

  • };

  • Службові інтерфейси експортованих кокласів:

    • "_Ім'яЕкспортованогоКласу" – у даному випадку _My_NETClass;
    • "стандартно експортований" інтерфейс _Object.


Експортована бібліотека типів ExportToCom.tlb (вигляд в Oleview.exe). Службовий інтерфейс _My_NETClass



Службовий інтерфейс _Object у mscorlib.tlb (вигляд в Oleview.exe)

  • _Object – це "стандартно експортований" інтерфейс, опис якого міститься у mscorlib.tlb. Остання бібліотека завжди "підключається" до експортованих бібліотек типів:

  • importlib("mscorlib.tlb").



Атрибут ClassInterface

  • Використовуючи атрибут ClassInterface, можна впливати на генерацію службового інтерфейсу _Ім'яЕкспортованогоКласу (інтерфейсу на зразок _My_NETClass).



Приклад. (Файл ExportToCom1.cs)

  • // Файл ExportToCom1.cs

  • using System;

  • using System.Windows.Forms;

  • using System.Reflection;

  • [assembly: AssemblyKeyFile("mykeys.snk")]

  • [

  • ClassInterface(ClassInterfaceType.AutoDual)

  • ]

  • public class My_NETClass

  • {

  • public void My_Message(String param)

  • {

  • . . .

  • }

  • };



Експортована бібліотека типів ExportToCom1.tlb (вигляд в Oleview.exe). Службовий інтерфейс _My_NETClass



Експортування .NET-класу з “власним” інтерфейсом

  • Приклад (фрагмент файлу ExportToCom2.cs):

  • public interface IMy_NETClass

  • {

  • void My_Message(String param);

  • };

  • [ ProgId("unicyb.kuzenko.FunnyWorld"),

  • // атрибут ProgId дозволяє перестрахуватись від

  • // можливої колізії імен

  • ClassInterface(ClassInterfaceType.AutoDual)]

  • public class My_NETClass: IMy_NETClass

  • {

  • public void My_Message(String param)

  • {

  • MessageBox.Show(param,

  • "My_NETClass::My_Message method was invoked");

  • }

  • };



Експортована бібліотека типів ExportToCom2.tlb (вигляд в Oleview.exe). “Власний” інтерфейс IMy_NETClass



Деякі атрибути, що впливають на імпортування бібліотек типів у .NET

  • Атрибути в описах бібліотек типів задаються ключовим словом custom.

  • 1. Атрибут з ідентифікатором

  • 0F21F359-AB84-41E8-9A78-36D110E6D2F9 визначає ім'я програмного елемента при .NET-імпортуванні (наприклад, при використанні tlbimp).

  • 2. Атрибут з ідентифікатором

  • 90883F05-3D28-11D2-8F17-00A0C9A6186D визначає строге ім'я збірки при імпортуванні у .NET (наприклад, знову-таки шляхом використанні tlbimp).



ExportToCom2.tlb та атрибути з ідентифікатором 0F21F359-AB84-41E8-9A78-36D110E6D2F9



Перетворення .NET - COM - .NET (ExportToCom2.tlb )



Схожі:

Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconПеренесення рішень із платформи com на платформу. Net 2006 Зміст
Компонент це відчужений виконуваний бінарний код, до якого, як правило, додатково ставляться наступні вимоги
Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconДо перенесення рішень із платформи. Net на платформу com 2010-2011 Створення бібліотеки класів (під com)

Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови платформи. Net framework 2006-2012 Зміст

Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови платформи. Net framework 2006 Зміст
Розробка платформи почалася у 1998 році. Перша робоча назва Project 42, потім була назва com object Runtime чи, скорочено, cor, пізніше...
Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови платформи. Net framework 2007 Зміст

Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови віддаленої взаємодії об'єктів. Net (. Net remoting) 2006-2009 Зміст

Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови віддаленої взаємодії об'єктів. Net (. Net remoting) 2006 Зміст
На цьому ґрунтується захист: збій в одному домені не впливає на інші домени, навіть у тому ж процесі. Зауважимо, що реальний процес...
Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови віддаленої взаємодії об'єктів. Net (. Net remoting) 2009 Зміст

Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови віддаленої взаємодії об'єктів. Net (. Net remoting) 2007 Зміст

Перенесення рішень із платформи. Net на платформу com 2006 Зміст iconОснови віддаленої взаємодії об'єктів. Net (. Net remoting) 2008 Зміст


Додайте кнопку на своєму сайті:
dok.znaimo.com.ua


База даних захищена авторським правом ©dok.znaimo.com.ua 2013
звернутися до адміністрації
dok.znaimo.com.ua
Головна сторінка