- Создание нового проекта динамической библиотеки.
- Реализация методов (см. предыдущий параграф).
- Определение класса библиотеки.
- Реализация в этом классе единственной функции CreateMethodDef.
- Включение в функцию CreateMethodDef кода для создания экземпляра каждого из методов, определяемых данной библиотекой.
- Определение GUID класса библиотеки, сгенерированного утилитой guidgen.exe.
- Определение фабрики класса и экспортируемых функций DLL.
Добавление метода в уже существующую библиотеку возможно при наличии исходного кода и требует выполнения только шагов 2 и 5.
Ниже приводится исходный код, реализующий библиотеку CExampleLib, создающую методы Tune и Calc для алгоритма LSM.
library BasicRecog; uses Sysutils, ComServ, ComObj, MAComClasses in '..\shared\MAComClasses.pas', ForecsysMACom in '..\shared\ForecsysMACom.pas'; const CLSID_SampleLibrary:TGUID='{12121212-1212-1212-1212-121212121212}'; type TSampleLibrary=class(TComObject {не TInterfacedObject!},ImaLibrary) public function CreateMethodDef(aname: PWideChar; methodno: integer; out Method: ImaMethodDef): HResult; stdcall; // Функция создания экземпляров методов end; // Функция создания экземпляров методов function TSampleLibrary.CreateMethodDef(aname: PWideChar; methodno: integer; out Method: ImaMethodDef): HResult; begin result:=MA_NOERROR; method:=nil; if WideCompareText(aname,'BayesClassifierWeight')=0 then case methodno of 0:method:=TLinTune.Create; 1:method:=TLinCalc.Create; else result:=MA_ERR_METHODUNDEF; end; if method=nil then result:=MA_ERR_NOMEMORY; end; // Определение экспортируемых функций exports DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer; begin ComServer.SetServerName('ForecsysExample'); // Определение фабрики класса библиотеки TComObjectFactory.Create(ComServer,TSampleLibrary,CLSID_SampleLibrary, 'ExampleLib','Example library, (c) FORECSYS, 2003', ciMultiInstance,tmBoth); end.