2009-03-22 34 views
41

IDL có ý nghĩa gì? Tôi đã googled nó, và phát hiện ra nó là viết tắt của Interface Definition Language, được sử dụng cho định nghĩa giao diện cho các thành phần. Nhưng, trong thực tế, mục đích của IDL là gì? Microsoft có sử dụng nó không?IDL là gì?

+0

xem thêm http://en.wikipedia.org/wiki/Interface_description_language cho IDL ... – Thufir

Trả lời

57

Ngôn ngữ định nghĩa giao diện (IDL) được sử dụng để thiết lập liên lạc giữa máy khách và máy chủ trong các cuộc gọi thủ tục từ xa (RPC). Đã có nhiều biến thể của điều này như Sun RPC, ONC RPC, DCE RPC và vân vân.

Về cơ bản, bạn sử dụng IDL để chỉ định giao diện giữa máy khách và máy chủ sao cho cơ chế RPC có thể tạo các đoạn mã cần thiết để gọi các chức năng trên mạng.

RPC cần tạo các hàm sơ khai cho máy khách và máy chủ, sử dụng thông tin IDL. Nó rất giống với một nguyên mẫu hàm trong C nhưng kết quả cuối cùng là hơi khác nhau, chẳng hạn như:

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

Trong ví dụ này, thay vì gọi function trong cùng một chương trình, main gọi một hàm client còn sơ khai (với cùng nguyên mẫu là function) có trách nhiệm đóng gói thông tin và đưa nó qua dây dẫn đến một quy trình khác. Đây có thể là cùng một máy hoặc một máy khác, nó không thực sự quan trọng - một trong những ưu điểm của RPC là có thể di chuyển các máy chủ theo ý muốn.

Trong máy chủ, có quy trình 'người nghe' sẽ nhận thông tin đó và chuyển nó tới máy chủ. Cuống của máy chủ nhận thông tin, mở gói và chuyển nó đến hàm thực.

Chức năng thực tế sau đó thực hiện những gì cần và quay trở lại cuống máy chủ có thể đóng gói thông tin trả về (cả mã trả về và bất kỳ biến số [out] hoặc [in,out]) và chuyển nó trở lại cuống máy khách.

Sơ khai khách hàng sau đó bỏ gói và chuyển nó trở lại main.

Chi tiết thực tế có thể khác đôi chút nhưng lời giải thích đó phải đủ tốt để có tổng quan khái niệm.

Các IDL thực tế có thể trông giống như:

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

Tất cả những thứ ở phía trên là cơ bản mạng lưới thông tin, thịt của nó nằm bên trong phần giao diện mà nguyên mẫu được hiển thị. Điều này cho phép trình biên dịch IDL xây dựng các hàm x stub và x server để biên dịch và liên kết với mã máy khách và máy chủ của bạn để RPC hoạt động.

Microsoft sử dụng IDL (Tôi nghĩ rằng họ có trình biên dịch MIDL) cho công cụ COM. Tôi cũng đã sử dụng các sản phẩm của bên thứ ba với các hệ điều hành MS, cả DCE và ONC RPC.

+2

Chúng có trình biên dịch MIDL. Nó được gọi là midlc. Har har. – sblom

+8

midlc như trái ngược với C#? :-) Chỉ có nhạc sĩ mới hiểu được sự hài hước này, què như vậy. – paxdiablo

1

Đó là ngôn ngữ đã được sử dụng trong kỷ nguyên COM để xác định giao diện theo kiểu thời trang trung lập (được cho là).

10

Ngoài ra còn có Interactive Data Language mà tôi đã có một công việc sử dụng để phân tích dữ liệu khoa học, nhưng có lẽ từ ngữ cảnh rõ ràng với bạn đó không phải là IDL này là viết tắt của.

1

Nó xác định giao diện được sử dụng để giao tiếp với dịch vụ tiếp xúc trong ứng dụng khác.

Nếu bạn sử dụng SOAP, bạn sẽ biết về WSDL. WSDL là một dạng khác của IDL.IDL thường đề cập đến Microsoft COM hoặc CORBA IDL.

5

IDL là từ viết tắt của Interface Definition Language trong đó có một số biến thể tùy thuộc vào nhà cung cấp hoặc nhóm tiêu chuẩn đã xác định ngôn ngữ. Mục đích của IDL là mô tả giao diện cho một số dịch vụ để các khách hàng muốn sử dụng dịch vụ sẽ biết phương thức và thuộc tính nào, giao diện, dịch vụ cung cấp. IDL thường được sử dụng với giao diện nhị phân và tệp ngôn ngữ IDL mô tả các kiểu dữ liệu được sử dụng trong giao diện nhị phân.

Có một số tiêu chuẩn khác nhau cho thành phần nhị phân, thường là COTS or Commercial Off The Shelf và cách khách hàng giao tiếp với thành phần nhị phân có thể khác nhau mặc dù theo truyền thống, một số phiên bản Remote Procedure Call or RPC được sử dụng. Hai tiêu chuẩn như vậy là Microsoft Common Object Model or COM standardCommon Object Request Broker or CORBA standard. Có các tiêu chuẩn khác cho các thành phần như Firefox plugins hoặc các trình cắm thêm cho các ứng dụng khác như Visual Studio, tuy nhiên chúng không nhất thiết phải sử dụng một số dạng Ngôn ngữ mô tả giao diện sử dụng một số loại Bộ phát triển phần mềm hoặc SDK với giao diện chuẩn và nổi tiếng API.

IDL cho phép mức độ linh hoạt cao hơn trong việc có thể tạo các thành phần cung cấp các loại dịch vụ, do bản chất nhị phân của chúng, có thể được sử dụng với nhiều ngôn ngữ lập trình khác nhau và nhiều môi trường khác nhau.

Microsoft sử dụng một phương ngữ của IDL với các đối tượng COM và IDL của Microsoft không giống như CORBA IDL mặc dù có những điểm giống nhau vì chúng chia sẻ nguồn gốc ngôn ngữ chung. Tệp IDL chứa mô tả về các giao diện được hỗ trợ bởi một đối tượng COM. COM cho phép tạo ra các dịch vụ In Process (có thể sử dụng RPC, hoặc các cuộc gọi DLL trực tiếp) hoặc các dịch vụ Out of Process (sử dụng RPC). Ý tưởng đằng sau COM là khách hàng chỉ cần biết số nhận dạng cho thành phần cùng với giao diện để có thể sử dụng nó. Máy khách yêu cầu đối tượng COM sau đó yêu cầu một đối tượng lớp từ nhà máy của đối tượng COM hỗ trợ giao diện mà máy khách muốn sử dụng và sau đó sử dụng đối tượng COM thông qua giao diện đó.

Microsoft cung cấp trình biên dịch MIDL xử lý tệp IDL để tạo thư viện kiểu, cung cấp thông tin cho người dùng đối tượng COM về giao diện và các sơ yếu cần thiết cho dữ liệu marshaling trên giao diện giữa máy khách và dịch vụ.

So sánh dữ liệu về cơ bản có nghĩa là sơ khai nhận dữ liệu do khách hàng cung cấp, gói nó lên và gửi cho dịch vụ thực hiện một số hành động và gửi lại dữ liệu. Việc gửi và nhận dữ liệu này có thể thông qua một số dịch vụ RPC hoặc thông qua các cuộc gọi hàm DLL trực tiếp. Phản hồi từ dịch vụ được dịch sang dạng phù hợp cho khách hàng và sau đó được cung cấp cho khách hàng. Về cơ bản, chức năng marshaling là adapter (see the adapter design pattern) hoặc bridge (see the bridge design pattern) giữa khách hàng và dịch vụ.

Visual Studio, kinh nghiệm của tôi là với C++, chứa một số trình thuật sĩ có thể được sử dụng để tạo ví dụ để bạn có thể chơi với điều này. Nếu bạn quan tâm bạn có thể tạo ra một không gian làm việc và sau đó trong không gian làm việc bạn có thể tạo ra một dự án ATL để tạo ra một điều khiển và sau đó một dự án hộp thoại MFC đơn giản để kiểm tra nó ra. Sử dụng ATL cho điều khiển COM của bạn ẩn một vài chi tiết mà bạn có thể điều tra sau và dự án hộp thoại MFC đơn giản cung cấp một cách dễ dàng để tạo ra một container. Bạn cũng có thể sử dụng công cụ ActiveX Control Test Container, có sẵn trong Visual Studio, để thực hiện kiểm tra sơ bộ và xem cách các phương thức và thuộc tính hoạt động như thế nào.

Ngoài ra còn có một số dự án mẫu trên các trang web như codeproject.com. Ví dụ ở đây là one using C to expose all the ugly plumbing behind COM và đây là one using C++ without ATL.

1

IDL rất quan trọng trong 2 trường hợp. 1. Để tạo dll proxy/stub cho các máy chủ exe. 2. Để tạo thư viện Kiểu cho các máy chủ tự động hóa.

Có bài viết rất tốt cho vấn đề cơ bản của IDL tại link

Nghiên cứu IDL, nó là tốt hơn để đọc riêng tập tin tiêu đề IDL trình biên dịch của được đưa ra bao gồm thư mục con của ++ gói VC.

+0

Trong khi điều này về lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (// meta.stackoverflow.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo. – Rizier123

Các vấn đề liên quan