- Создание нового проекта динамической библиотеки.
- Реализация методов (см. предыдущий параграф).
- Определение класса библиотеки, наследуемого от CmaStdLibrary.
- Реализация в этом классе единственной функции CreateMethodDef.
- Включение в функцию CreateMethodDef кода для создания экземпляра каждого из методов, определяемых данной библиотекой.
- Определение GUID класса библиотеки, сгенерированного утилитой guidgen.exe.
- Определение фабрики класса и экспортируемых функций DLL. Рекомендуется использовать для этого макросы MA_LIBLIST_BEGIN, MA_LIBRARY, MA_LIBLIST_END.
Макросы MA_LIBLIST_BEGIN и MA_LIBLIST_END служат ограничителями списка библиотек, определяемых в данной DLL.
Добавление метода в уже существующую библиотеку возможно при наличии исходного кода и требует выполнения только шагов 2 и 5.
Ниже приводится исходный код, реализующий библиотеку CExampleLib, создающую методы Tune и Calc для алгоритма LSM.
#include#include "maComClasses.h" #include "maComBase.h" // GUID класса библиотеки, сгенерированный утилитой guidgen.exe const GUID CLSID_CExampleLib={0x12121212, 0x1212, 0x1212,{0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12}}; // Класс библиотеки class CExampleLib : public CmaStdLibrary{ public: CExampleLib () {} virtual HRESULT STDMETHODCALLTYPE CreateMethodDef (maString aname, int methodno, ImaMethodDef** method){ HRESULT res = S_OK; *method = 0; if (_wcsicmp(aname, L"LSM")==0) { switch (methodno) { //case 0: *method = new CLsmTune; break; case 0: (*method) = new CLsmCalc(); break; default: res = MA_ERR_METHODUNDEF; break; } } if (method==0 && res==S_OK) res = MA_ERR_NOMEMORY; return res; } }; // макросы для определения фабрики класса и экспортируемых функций MA_LIBLIST_BEGIN MA_LIBRARY(CLSID_CExampleLib,CExampleLib, "ForecsysExample.ExampleLib","") MA_LIBLIST_END