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