2009-03-22 22 views
41

Co to znaczy IDL? Mam googleed to i okazało się, że to skrót od Interface Definition Language, który jest używany do definicji interfejsu dla komponentów. Ale w praktyce, jaki jest cel IDL? Czy Microsoft z niego korzysta?Co to jest IDL?

+0

patrz także http://pl.wikipedia.org/wiki/Interface_description_language dla IDL ... – Thufir

Odpowiedz

57

Język definicji interfejsu (IDL) służy do konfigurowania komunikacji między klientami i serwerami w zdalnych wywołaniach procedur (RPC). Było wiele odmian tego typu, jak Sun RPC, ONC RPC, DCE RPC i tak dalej.

Zasadniczo używa się IDL do określenia interfejsu między klientem a serwerem, aby mechanizm RPC mógł tworzyć kody pośredniczące wymagane do wywoływania funkcji w sieci.

Usługa RPC musi tworzyć funkcje pośredniczące dla klienta i serwera za pomocą informacji IDL. Jest bardzo podobna do prototypu funkcji w C, ale efekt końcowy jest nieco inny, takich jak:

+----------------+ 
| Client   | 
| +----------+ | +---------------+ 
| | main | | | Server  | 
| |----------| | | +----------+ | 
| | stub_cli |------->| stub_svr | | 
| +----------+ | | |----------| | 
+----------------+ | | function | | 
        | +----------+ | 
        +---------------+ 

W tym przykładzie, zamiast dzwonić function w tym samym programie, main wywołuje funkcję skrótowej klienta (z tym samym prototyp jako function), który odpowiada za upakowanie informacji i przekazanie jej przez przewód do innego procesu. Może to być ta sama maszyna lub inna maszyna, nie ma to znaczenia - jedną z zalet RPC jest możliwość swobodnego przenoszenia serwerów.

Na serwerze istnieje proces "nasłuchu", który otrzyma te informacje i przekaże je serwerowi. Kod pośredniczący serwera odbiera informacje, rozpakowuje je i przekazuje do rzeczywistej funkcji.

Prawdziwa funkcja wykonuje to, czego potrzebuje, i wraca do kodu pośredniczącego serwera, który może spakować informacje zwrotne (zarówno kod powrotu, jak i zmienne [out] lub [in,out]) i przekazać je z powrotem do kodu pośredniczącego klienta.

Kod pośredniczący klienta następnie rozpakowuje go i przekazuje go z powrotem do main.

Rzeczywiste szczegóły mogą się nieco różnić, ale wyjaśnienie powinno być wystarczająco dobre, aby uzyskać ogólny przegląd koncepcji.

Rzeczywista IDL może wyglądać następująco:

[uuid(f9f6be21-fd32-5577-8f2d-0800132bd567), 
    version(0), 
    endpoint("ncadg_ip_udp:[1234]", "dds:[19]")] 
interface function_iface { 
    [idempotent] void function(
     [in] int handle, 
     [out] int *status 
    ); 
} 

wszystkie rzeczy u góry jest w zasadzie sieci informacji, mięso z nich jest wewnątrz sekcji interfejsu gdzie prototypy zostały pokazane. Dzięki temu kompilator IDL może zbudować funkcje x stub i x server do kompilowania i łączenia z klientem i kodem serwera, aby uruchomić RPC.

Firma Microsoft używa IDL (chyba kompilator MIDL) dla plików COM. Używam również produktów innych firm z systemami operacyjnymi MS, zarówno DCE, jak i ONC RPC.

+2

Mają kompilator MIDL. Nazywa się to midlc. Har har. – sblom

+8

midlc w przeciwieństwie do C#? :-) Tylko muzycy zrozumieją ten humor, kulawy taki jaki jest. – paxdiablo

1

Jest to język używany w erze COM do definiowania interfejsów w sposób (prawdopodobnie) neutralny dla języka.

10

Istnieje również Interactive Data Language, z którego miałem pracę do analizy danych naukowych, ale być może z kontekstu jasno wynika, że ​​to nie to, co oznacza IDL.

1

Definiuje interfejs używany do komunikacji z odsłoniętą usługą w innej aplikacji.

Jeśli używasz SOAP, będziesz wiedzieć o WSDL. WSDL jest inną formą IDL.IDL zwykle odnosi się do Microsoft COM lub CORBA IDL.

5

IDL jest akronimem oznaczającym Interface Definition Language, z którego istnieje kilka odmian w zależności od dostawcy lub standardowej grupy, która zdefiniowała język. Celem IDL jest opisanie interfejsu dla niektórych usług, aby klienci, którzy chcą korzystać z tej usługi, będą wiedzieli, jakie metody i właściwości, interfejs, usługa zapewniają. IDL jest zwykle używany z interfejsami binarnymi, a plik języka IDL opisuje typy danych używane w interfejsie binarnym.

Istnieje kilka różnych standardów dla komponentów binarnych, zwykle COTS or Commercial Off The Shelf, a sposób komunikacji klienta z komponentem binarnym może się różnić, chociaż tradycyjnie używana jest wersja Remote Procedure Call or RPC. Dwa takie standardy to Microsoft Common Object Model or COM standard i Common Object Request Broker or CORBA standard. Istnieją inne standardy dotyczące komponentów, takich jak Firefox plugins lub wtyczek do innych aplikacji, takich jak Visual Studio, jednak nie koniecznie używają one jakiejś formy Języka Opisu Interfejsu używającego zamiast niej jakiegoś rodzaju Zestawu programistycznego lub SDK ze znormalizowanymi i dobrze znanymi interfejsami do API.

To, na co pozwala IDL, to większa elastyczność w tworzeniu komponentów oferujących różnego rodzaju usługi, które ze względu na swój binarny charakter mogą być używane z wieloma różnymi językami programowania i różnymi środowiskami.

Firma Microsoft używa dialektu IDL z obiektami COM, a identyfikator Microsoft IDL to nie to samo co CORBA IDL, chociaż istnieją podobieństwa, ponieważ mają wspólne korzenie języka. Plik IDL zawiera opis interfejsów obsługiwanych przez obiekt COM. COM umożliwia tworzenie usług In Process (może używać wywołań RPC lub bezpośrednich wywołań DLL) lub usług Out of Process (używa RPC). Ideą COM jest to, że klient musi tylko znać identyfikator komponentu wraz z interfejsem, aby móc z niego korzystać. Klient żąda obiektu COM, a następnie żąda obiektu klasy z fabryki obiektu COM, który obsługuje interfejs, z którego chce korzystać klient, a następnie korzysta z obiektu COM za pośrednictwem tego interfejsu.

Firma Microsoft dostarcza kompilator MIDL, który przetwarza plik IDL w celu wygenerowania biblioteki typów, dostarczając użytkownikom obiektu COM informacje o interfejsie oraz niezbędne informacje pośrednie do przesyłania danych przez interfejs między klientem a usługą.

Marshaling danych zasadniczo oznacza, że ​​kod pośredniczący pobiera dane dostarczone przez klienta, pakuje je i wysyła do usługi, która wykonuje pewne działanie i odsyła dane. Wysyłanie i odbieranie danych może odbywać się za pośrednictwem niektórych usług RPC lub poprzez bezpośrednie wywołania funkcji DLL. Odpowiedź z usługi jest tłumaczona na formę odpowiednią dla klienta, a następnie dostarczaną klientowi. Zasadniczo funkcjonalność marszałkownika to między klientem a usługą: adapter (see the adapter design pattern) lub bridge (see the bridge design pattern).

Visual Studio, moje doświadczenie jest z C++, zawiera pewną liczbę kreatorów, za pomocą których można wygenerować przykład, dzięki czemu można z nim grać. Jeśli jesteś zainteresowany, możesz utworzyć przestrzeń roboczą, a następnie w przestrzeni roboczej możesz utworzyć projekt ATL, aby wygenerować kontrolę, a następnie prosty projekt dialogowy MFC, aby go przetestować. Używanie ATL do kontroli COM ukrywa sporo szczegółów, które możesz zbadać później, a prosty projekt dialogowy MFC zapewnia łatwy sposób na utworzenie kontenera. Możesz także użyć narzędzia ActiveX Control Test Container, dostępnego w Visual Studio, aby wykonać wstępne testy i zobaczyć, jak działają metody i właściwości.

Istnieje również wiele przykładowych projektów na stronach internetowych, takich jak codeproject.com. Na przykład tutaj jest one using C to expose all the ugly plumbing behind COM i tutaj jest one using C++ without ATL.

1

IDL ma zasadnicze znaczenie w 2 przypadkach. 1. Aby utworzyć proxy/kody pośredniczące dla serwerów exe. 2. Aby utworzyć bibliotekę typów dla serwerów automatyzacji.

Jest bardzo dobry artykuł o podstawach IDL na link

celu zbadania IDL, to lepiej czytać własne pliki nagłówkowe IDL kompilatory, które podane są m.in. podkatalogu pakietu VC++.

+0

Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby lepiej] (// meta.stackoverflow.com/q/8259), aby uwzględnić istotne części odpowiedzi tutaj, i podać link dla odniesienia. – Rizier123