Для серверной инфраструктуры плагинов я хотел бы реализовать библиотеки DLL, которые предоставляют метод RegisterPlugin, который возвращает ссылку на класс (TInterfacedClass).
Хост-приложение затем создает экземпляр ( s) этого класса, и экземпляры будут работать в контексте хост-потока (ов). (Это отличается, например, от инфраструктуры подключаемых модулей Jedi VCL, которая создает экземпляр подключаемого модуля в DLL или BPL и возвращает экземпляр на хост.)
Первые тесты пока не выявили проблем. Однако, есть ли скрытые проблемы с управлением памятью, о которых я должен знать? Поскольку я использую Delphi 2009 для этого проекта, FastMM4 является диспетчером памяти по умолчанию.
Вот набросок проекта библиотеки DLL плагина:
library ExamplePlugin;
uses
...
type
TPluginOne = class(TInterfacedObject, ...)
...
end;
function RegisterPlugin: TInterfacedClass; stdcall;
begin
Result := TPluginOne;
end;
exports
RegisterPlugin;
{ TPluginOne }
// ... plugin class implementation
begin
end.