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 файл библиотеки типов, который потом используется. А что внутри этого файла я думаю хоть немного понятно.