70-536:Using .NET Types from COM Applications

Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.

Wytyczne dotyczące udostępniania typów .NET dla aplikacji COM

Kiedy planujemy udostępniać typy .NET w aplikacjach COM, powinniśmy trzymać się poniższych wytycznych:

  • Typy, metody, właściwości, pola oraz zdarzenia muszą być publiczne.
  • Klasy powinny wyraźnie implementować interfejsy. Możemy również pozwolić aby COM generował nam interfejs automatycznie
  • Typy powinny mieć domyślny, bezparametrowy konstruktor. Należy unikać sparametryzowanych konstruktorów
  • Typy nie mogą być abstrakcyjne
  • Należy unikać statycznych metod.
  • Zawierać błędy HRESULT we własnych klasach wyjątków
  • Dostarczać GUIDY dla typów, które tego potrzebują

Atrybuty interoperacyjne

Przestrzeń System.InteropServices dostarcza kilka atrybutów, których możemy użyć do dostosowywania domyślnych zachowań typów .NET w aplikacjach COM.

  • ClassInterfaceAttributeokreśla czy Tlbexp.exe ma automatycznie generować interfejs klasy.
  • ComRegisterFunctionAttribute i ComUnregisterFunctionAttribute – określa metodę, która powinna być wywołana kiedy assembly jest zarejestrowana bądź nie, dzięki czemu możemy uruchomić własny kod.
  • ComSourceInterfacesAttribute – identyfikuje źródło zdarzenia COM.
  • ComVisibleAttribute – gdy ustawiony jest na false, uniemożliwia COM przeglądania typów bądź całych assembly.
  • ProgIdAttribute – określa ręcznie klasę ProgID.

Poniższy kod prezentuje użycie ComVisibleAttribute do ukrycia metody oraz właściwości w “customowej” klasie:

   1: using System.Runtime.InteropServices;
   2:  class MySecretClass
   3:   {
   4:     public MySecretClass()
   5:      { 
   6:      }
   7:  
   8: [ComVisible(false)]
   9: public int Method1(string param)
  10: {
  11:   return 0;
  12: }
  13: public bool Method2()
  14: {
  15:  return true;
  16: }
  17: [ComVisible(false)]
  18: public int Property1
  19: {
  20:  get
  21:   {
  22:    return Property1;
  23:   }
  24: }
  25: }

Jak eksportować Type Library używając Type Library Explorer’a

Type Library Explorer (Tlbexp.exe, dostępny w konsoli Visual Studio) tworzy bibliotekę typów COM z assembly. Aby korzystać z Tlbexp.exe, wystarczy podać ścieżkę do pliku zawierającego bibliotekę typów, używając w tym celu komendy:
tlbexp MyAssembly.dll

Poprzednie polecenie generuje nowy typ biblioteki z rozszerzeniem. TLB. Do określenia innej nazwy pliku używamy parametru /out.

Jak zarejestrować Assembly używając Visual Studio

Aby zarejestrować assembly podczas procesu budowania wykonujemy następujące kroki:

1. Tworzymy class Library
2. Z menu projektu wybieramy właściwości <classname>
3. Klikamy zakładkę Build. Zaznaczamy “Gegister For Com Interop”
4. Budujemy projekt.

How to Map HRESULT Error Codes and Exceptions

.NET Framework używa wyjątków do wskazywania błędów, również metody COM zwracające wartości HRESULT.
Jeśli stworzymy własną klasę wyjątku, możemy określić własne HRESULT przez dostarczenie wartości dla Exception.HResult  tak jak w poniższym przykładzie.

   1: public class NoAccessException : ApplicationException
   2: {
   3:   public NoAccessException()
   4:    {
   5:      HResult = 12;
   6:    }
   7: }

Kolejny artykuł z serii to 70-536 Using Reflection

Tagi: , ,

Pingbacks and trackbacks (1)+

Add comment




  Country flag
biuquote
  • Comment
  • Preview
Loading


Eastgroup.pl na facebooku