System.Reflection.Assembly.LoadFileを使用して、実行時にいくつかのプラグイン (任意の .NET 言語で実装) をロードする Managed C++ で DLL を開発しました。すべてのプラグインで実装されるインターフェースは C# で実装されています。これは、Managed C++ コードで次のように使用されます。
#using <IMyPluginInterface.dll> // Make the 'IMyPluginInterface' type available
ref class PluginManager {
List<IMyPluginInterface ^> ^m_plugins;
// Load all plugins in a well-known directory.
void load() {
for ( string dllFile in Directory.GetFiles( .., "*.dll" ) ) {
// Lookup the type of the plugin object using Reflection
Type pluginType = ...;
// Finally, instantiate the plugin and add it to our list.
m_plugins.Add( (IMyPluginInterface ^)Activator.CreateInstance( pluginType ) );
}
}
}
プラグインのロードはうまくいきます。私が直面している問題は、実行時にIMyPlugnInterface.dll
ファイルが Managed C++ DLL と同じディレクトリにない可能性があることです。これは、「IMyPluginInterface」タイプが実行時に使用できず、例外がスローされることを意味します。
#using
以前、ステートメントを介して参照される DLL を解決するときに使用されるルックアップ パスに影響を与えることができるかどうかを尋ねました。残念ながら、これは結果をもたらしませんでした。
これには別のアプローチがありますか?経由で参照#using
される型をマネージ C++ DLL にコンパイルできますか? たぶん、他の誰かがまったく異なる解決策を持っていますか?