Ваш код неполон, но из того, что вы включили, есть один очевидный недостаток.
Вы, похоже, экспортируете класс (TInterfacedClass) из DLL.Это может вызвать проблемы, когда клиенты пытаются использовать ваш класс с другой версией Delphi.Более того, это сделает их беспомощными, если они захотят писать плагины на другом языке.
Лично я бы выбрал интерфейс на основе COM, который позволит авторам плагинов создавать плагины влюбой язык.На самом деле это та самая проблема, которую COM придумал для решения.
Если вы счастливы, что вынуждены использовать один и тот же компилятор для плагинов и хост-приложения, и предпочитаете выставлять классы для интерфейсов COM,тогда вам нужно убедиться, что все освобождения выполняются с помощью того же менеджера памяти, что и выделенная память.Самый простой способ - использовать ShareMem, и тогда вы будете в безопасности.
ОБНОВЛЕНИЕ
Космин указывает в комментарии еще один недостаток с экспортом классов через границы модуля.Это в основном то, что вы не должны делать.COM был разработан именно для этой цели, и он по-прежнему должен быть для вас первым выбором.Интерфейсы Delphi, совместимые с COM, поэтому вы можете получить те же преимущества бинарного взаимодействия без необходимости создавать серверы, регистрировать CLSID и т. Д.
Я думаю, что ваш плагин должен выглядеть следующим образом:
library ExamplePlugin;
type
TPluginOne = class(TInterfacedObject, IPlugin)
[GUID]
public
constructor Create(const Host: THostApp);
end;
function RegisterPlugin(const Host: IHostApp): IPlugin; stdcall;
begin
Result := TPluginOne.Create(Host);
end;
exports
RegisterPlugin;
begin
end.