有没有办法在delphi prism中加载库?

时间:2012-09-04 13:38:55

标签: .net dll delphi-prism

我需要在运行时加载动态链接或静态库文件。有没有办法在delphi prism中做到这一点?

MSDN库似乎没有表明。

任何帮助或提示都会非常感激。

谢谢,

2 个答案:

答案 0 :(得分:2)

您可以使用Assembly.LoadFrom方法加载程序集。从这里,您可以使用reflection来调用库的公共方法。

答案 1 :(得分:0)

您的问题没有提供有关请求性质的更多上下文,但是如果您希望为插件类型扩展性原因加载程序集,那么我建议使用像MEF这样的库(Managed Extensibility)框架)。有一篇关于使用MEF with Delphi Prism here的简短文章,但它允许您以多种不同的方式定义界面并使用您的程序集:

首先,您应该定义您的界面:

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;