0

実行時に動的にリンクされたライブラリ ファイルまたは静的ライブラリ ファイルを読み込む必要があります。デルファイプリズムでそれを行う方法はありますか?

MSDN ライブラリはそれを示していないようです。

ヘルプやヒントは大歓迎です。

ありがとう、

4

2 に答える 2

2

このメソッドを使用してAssembly.LoadFrom、アセンブリをロードできます。ここから、リフレクションを使用してライブラリのパブリックメソッドを呼び出すことができます。

于 2012-09-04T14:47:43.067 に答える
0

あなたの質問は、リクエストの性質についてこれ以上のコンテキストを提供するものではありませんが、プラグイン タイプの拡張性の理由でアセンブリを読み込もうとしている場合は、MEF (Managed Extensibility Framework) のようなライブラリを使用することをお勧めします。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;
于 2012-10-22T13:25:21.053 に答える