Шаг 8 - Что такое ODL

ODL (Object Description Language) - это язык для создания библиотек типов. Запустите на проект. Выбирете вкладку ClassView и два раза шелкните на _DDMyActive1. В результате загрузится файл DMyActive1.odl, в котором и находится код. Вот он.

......
[ uuid(27B6AAAA-C1D7-11D3-A3A8-000001260696), version(1.0),
  helpfile("DMyActive1.hlp"),
  helpstring("DMyActive1 ActiveX Control module"),
  control ]
library DMYACTIVE1Lib
{
	importlib(STDOLE_TLB);
	importlib(STDTYPE_TLB);

	//  Primary dispatch interface for CDMyActive1Ctrl

	[ uuid(27B6AAAB-C1D7-11D3-A3A8-000001260696),
	......

Вобщем-то ODL это свой язык. Немного странный, но что сделаешь. Самое первое библиотека типов должна однозначно себя идентифицировать нужен ее uuid, вот он и описан.

uuid(27B6AAAA-C1D7-11D3-A3A8-000001260696)

Дальше библитека типов должна идентифицировать себя по имени. Вот как

 helpstring("DMyActive1 ActiveX Control module")

Дальше импортируется стандартная библиотека типов OLE

importlib(STDOLE_TLB);
importlib(STDTYPE_TLB);
Со строки показанной ниже идет описание интерфейса.
//  Primary dispatch interface for CDMyActive1Ctrl

Интерфейсу нужен uuid и он присваивается.

[ uuid(27B6AAAB-C1D7-11D3-A3A8-000001260696),
А вот дальше описываются наши методы и свойства.
properties:
		// NOTE - ClassWizard will maintain property information here.
		//    Use extreme caution when editing this section.
		//{{AFX_ODL_PROP(CDMyActive1Ctrl)
		[id(1)] BSTR MyText; 
		//}}AFX_ODL_PROP

methods:
		// NOTE - ClassWizard will maintain method information here.
		//    Use extreme caution when editing this section.
		//{{AFX_ODL_METHOD(CDMyActive1Ctrl)
		[id(2)] void MakeUpper(); 
		//}}AFX_ODL_METHOD

После этого идет описание интерфейса событий по тому же принципу.

[ uuid(27B6AAAC-C1D7-11D3-A3A8-000001260696),
helpstring("Event interface for DMyActive1 Control") ]
dispinterface _DDMyActive1Events
{
	properties:
		//  Event interface has no properties

	methods:
		// NOTE - ClassWizard will maintain event information here.
		//    Use extreme caution when editing this section.
		//{{AFX_ODL_EVENT(CDMyActive1Ctrl)
		[id(DISPID_CLICK)] void Click(); 
		//}}AFX_ODL_EVENT
};

В самом конце сообщается о двух классах.

[ uuid(27B6AAAD-C1D7-11D3-A3A8-000001260696),
  helpstring("DMyActive1 Control"), control ]
coclass DMyActive1
{
	[default] dispinterface _DDMyActive1;
	[default, source] dispinterface _DDMyActive1Events;
};

В ранних версиях VC для компиляции этого в файла в файл .TLB использовалась специальная утилита MkTypLib. В данный момент компиляция производится автоматически. В результате в каталоге Debug, если создаете отладочную версию, будет файл DMyActive1.tlb. Это важный файл. Он в дальнейшем будет использоваться. Дайте поиск по диску C расширений tlb и вы их найдете.

Мы наверно еще коснемся этого вопроса. Так что если что непонятно не страшно. Главное, что ODL это специальный язык, на основе которого формируется TLB файл библиотеки типов, который потом используется. А что внутри этого файла я думаю хоть немного понятно.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.