我需要在运行时加载动态链接或静态库文件。有没有办法在德尔福棱镜中做到这一点?
MSDN 库似乎没有表明这一点。
任何帮助或提示将不胜感激。
谢谢,
您可以使用该Assembly.LoadFrom
方法加载程序集。从这里您可以使用反射来调用库的公共方法。
您的问题没有提供更多关于您的请求性质的上下文,但是如果您出于插件类型可扩展性的原因而希望加载程序集,那么我建议您使用像MEF(托管可扩展性框架)这样的库。这里有一篇关于在Delphi Prism中使用 MEF 的简短文章,但它允许您定义接口并以多种不同方式使用您的程序集:
首先你应该定义你的接口:
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;