Есть ли способ загрузить библиотеку в Delphi Prism?

Мне нужно загрузить динамически связанный или статический файл библиотеки во время выполнения. Есть ли способ сделать это в Delphi Prism?

Библиотека MSDN, кажется, не указывает на это.

Любая помощь или советы будут очень благодарны.

Спасибо,

2 ответа

Решение

Вы можете использовать Assembly.LoadFrom способ загрузить сборку. отсюда вы можете использовать отражение, чтобы вызвать публичный метод библиотеки.

Ваш вопрос не дает больше контекста о характере вашего запроса, но если вы хотите загружать сборки по причине расширяемости типа плагина, то я бы рекомендовал использовать такую ​​библиотеку, как MEF (Managed Extensibility Framework). Здесь есть краткий пост об использовании MEF с Delphi Prism, но он позволяет вам определить интерфейс и использовать ваши сборки различными способами:

Сначала вы должны определить ваш интерфейс:

PluginList = class
public
  [ImportMany(typeof(IFileAction))]
  property FileActions: IList<IFileAction> read write;
  constructor;
end;

Затем вы можете загрузить столько сборок для расширения, сколько пожелаете, различными способами:

var aggregateCat := new AggregateCatalog();
var catalogThisAssembly := new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
var catalogIndividual := new AssemblyCatalog('plugins\MyHelloPlugin.dll');
var dirCatalog := new DirectoryCatalog('plugins');

// Add our Catalogs here,
aggregateCat.Catalogs.Add(dirCatalog);

var container := new CompositionContainer(aggregateCat);
// Create our plugin hosting object
var pluginList := new PluginList();
// Compose the parts.
container.ComposeParts(pluginList);

Затем у вас есть список загруженных сборок, на которых вы можете выполнять свои действия:

for each plugin: IFileAction in pluginList.FileActions do
begin
  Console.WriteLine('Loaded ' + plugin.Name + ', version ' + plugin.Version);
end;
Другие вопросы по тегам