IT이야기

IDL이란

cyworld 2021. 4. 16. 21:33
반응형

IDL은 무엇입니까?


IDL은 무엇을 의미합니까? 나는 그것을 봤고 그것이 구성 요소의 인터페이스 정의에 사용되는 Interface Definition Language의 약자임을 알았습니다. 그러나 실제로 IDL의 목적은 무엇입니까? Microsoft에서 사용합니까?


인터페이스 정의 언어 (IDL)는 원격 프로 시저 호출 (RPC)에서 클라이언트와 서버 간의 통신을 설정하는 데 사용됩니다. Sun RPC, ONC RPC, DCE RPC 등과 같은 많은 변형이 있습니다.

기본적으로 IDL을 사용하여 클라이언트와 서버 간의 인터페이스를 지정하면 RPC 메커니즘이 네트워크에서 함수를 호출하는 데 필요한 코드 스텁을 만들 수 있습니다.

RPC는 IDL 정보를 사용하여 클라이언트와 서버에 대한 스텁 함수를 만들어야합니다. C의 함수 프로토 타입과 매우 유사하지만 최종 결과는 다음과 같이 약간 다릅니다.

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

이 예제에서는 function동일한 프로그램을 main호출하는 대신 function정보를 패키징하고 와이어를 통해 다른 프로세스로 가져 오는 역할을 하는 클라이언트 스텁 함수 (와 동일한 프로토 타입 사용 )를 호출합니다 . 이것은 같은 컴퓨터 일 수도 있고 다른 컴퓨터 일 수도 있지만, 실제로는 중요하지 않습니다. RPC의 장점 중 하나는 서버를 마음대로 이동할 수 있다는 것입니다.

서버에는 해당 정보를 수신하여 서버로 전달하는 '리스너'프로세스가 있습니다. 서버의 스텁은 정보를 수신하고 압축을 풀고 실제 함수에 전달합니다.

그런 다음 실제 함수는 필요한 작업을 수행하고 반환 정보 (반환 코드 및 임의 [out]또는 [in,out]변수 모두)를 패키지화 하고 클라이언트 스텁에 다시 전달할 수있는 서버 스텁으로 반환합니다 .

그런 다음 클라이언트 스텁은 압축을 풀고 다시 main.

실제 세부 사항은 약간 다를 수 있지만 그 설명은 개념적 개요에 충분해야합니다.

실제 IDL은 다음과 같습니다.

[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
    );
}

맨 위에있는 모든 것은 기본적으로 네트워킹 정보이며, 그 핵심은 프로토 타입이 표시되는 인터페이스 섹션 내부에 있습니다. 이를 통해 IDL 컴파일러는 RPC가 작동하도록 클라이언트 및 서버 코드를 컴파일하고 연결하기위한 x 스텁 및 x 서버 함수를 빌드 할 수 있습니다.

Microsoft는 COM 항목에 IDL (MIDL 컴파일러가 있다고 생각합니다)을 사용합니다. 또한 DCE 및 ONC RPC와 같은 MS 운영 체제와 함께 타사 제품을 사용했습니다.


과학적 데이터 분석에 사용했던 대화 형 데이터 언어있지만 컨텍스트에서이 IDL이 의미하는 것이 아님을 분명히 알 수 있습니다.


IDL은 인터페이스 정의 언어 (Interface Definition Language)머리 글자이며 언어 를 정의한 공급 업체 또는 표준 그룹에 따라 몇 가지 변형이 있습니다. IDL의 목표는 서비스를 사용하려는 클라이언트가 서비스가 제공하는 메서드와 속성, 인터페이스, 인터페이스를 알 수 있도록 일부 서비스에 대한 인터페이스를 설명하는 것입니다. IDL은 일반적으로 바이너리 인터페이스와 함께 사용되며 IDL 언어 파일은 바이너리 인터페이스에서 사용되는 데이터 유형을 설명합니다.

일반적으로 COTS 또는 Commercial Off The Shelf 와 같은 이진 구성 요소에 대한 여러 가지 표준이 있으며 클라이언트가 이진 구성 요소와 통신하는 방법은 일반적으로 일부 버전의 원격 프로 시저 호출 또는 RPC 가 사용 되지만 다를 수 있습니다 . 이러한 두 가지 표준은 Microsoft Common Object Model 또는 COM 표준Common Object Request Broker 또는 CORBA 표준 입니다. Firefox 플러그인 또는 Visual Studio 자체와 같은 다른 애플리케이션 용 플러그인 과 같은 구성 요소에 대한 다른 표준 이 있지만, 표준화되고 잘 알려진 인터페이스가있는 일종의 소프트웨어 개발 키트 또는 SDK를 대신 사용하는 인터페이스 설명 언어의 일부 형식을 반드시 사용하지는 않습니다. API.

IDL이 허용하는 것은 바이너리 특성으로 인해 다양한 프로그래밍 언어와 다양한 환경에서 사용할 수있는 다양한 종류의 서비스를 제공하는 구성 요소를 생성 할 수있는 유연성이 더 크다는 것입니다.

Microsoft는 COM 개체와 함께 IDL의 방언을 사용하며 Microsoft IDL은 공통 언어 루트를 공유하기 때문에 유사점이 있지만 CORBA IDL과 동일하지 않습니다. IDL 파일에는 COM 개체에서 지원하는 인터페이스에 대한 설명이 포함되어 있습니다. COM을 사용하면 In Process 서비스 (RPC 또는 직접 DLL 호출 사용) 또는 Out of Process 서비스 (RPC 사용)를 만들 수 있습니다. COM의 기본 개념은 클라이언트가 인터페이스와 함께 구성 요소의 식별자 만 알고 있으면 사용할 수 있다는 것입니다. 클라이언트는 COM 개체를 요청한 다음 클라이언트가 사용하려는 인터페이스를 지원하는 COM 개체의 팩토리에서 클래스 개체를 요청한 다음 해당 인터페이스를 통해 COM 개체를 사용합니다.

Microsoft는 유형 라이브러리를 생성하기 위해 IDL 파일을 처리하는 MIDL 컴파일러를 제공하여 COM 개체 사용자에게 인터페이스에 대한 정보를 제공하고 클라이언트와 서비스 간의 인터페이스에서 데이터를 마샬링하는 데 필요한 스텁을 제공합니다.

데이터 마샬링은 기본적으로 스텁이 클라이언트가 제공 한 데이터를 가져 와서 패키지화 한 다음 일부 작업을 수행하고 데이터를 다시 보내는 서비스로 보내는 것을 의미합니다. 이러한 데이터 송수신은 일부 RPC 서비스 또는 직접 DLL 함수 호출을 통해 이루어집니다. 서비스의 응답은 고객에게 적합한 형태로 번역되어 고객에게 제공됩니다. 따라서 기본적으로 마샬링 기능은 클라이언트와 서비스 간의 어댑터 (어댑터 디자인 패턴 참조 ) 또는 브리지 (브리지 디자인 패턴 참조) 입니다.

내 경험은 C ++ 인 Visual Studio에는 예제를 생성하는 데 사용할 수있는 여러 마법사가 포함되어 있으므로이를 사용할 수 있습니다. 관심이있는 경우 작업 공간을 만든 다음 작업 공간에서 ATL 프로젝트를 만들어 컨트롤을 생성 한 다음 간단한 MFC 대화 상자 프로젝트를 만들어 테스트 할 수 있습니다. COM 컨트롤에 ATL을 사용하면 나중에 조사 할 수있는 몇 가지 세부 정보가 숨겨지며 간단한 MFC 대화 상자 프로젝트는 컨테이너를 만드는 쉬운 방법을 제공합니다. Visual Studio에서 사용할 수있는 ActiveX 컨트롤 테스트 컨테이너 도구를 사용하여 예비 테스트를 수행하고 메서드 및 속성의 작동 방식을 확인할 수도 있습니다.

There are also a number of example projects on web sites such as codeproject.com. For instance here is one using C to expose all the ugly plumbing behind COM and here is one using C++ without ATL.


It's a language that has been used in the COM era to define interfaces in a (supposedly) language-neutral fashion.


It defines the interface to be used for communication with an exposed service in another application.

If you use SOAP you'll know about WSDL. The WSDL is another form of an IDL. IDL usually refers to Microsoft COM or CORBA IDL.


IDL is vital in 2 cases. 1. To create proxy/stub dlls for exe servers. 2. To create Type library for automation servers.

There is very good article for basics of IDL at link

To study IDL, it is better to read compilers's own idl header files which are given include subdirectory of VC++ package.

ReferenceURL : https://stackoverflow.com/questions/670630/what-is-idl

반응형