![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
![]() |
Шаг 8 - Что такое ODLODL (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 файл библиотеки типов, который потом используется. А что внутри этого файла я думаю хоть немного понятно. | | Автор Каев Артем. |
![]() |
![]() |
![]() |
|