- Создание нового проекта динамической библиотеки.
- Реализация методов (см. предыдущий параграф).
- Определение класса библиотеки.
- Реализация в этом классе единственной функции 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.