我在托管 C++ 中开发了一个 DLL,它在运行时使用System.Reflection.Assembly.LoadFile加载一些插件(以任何 .NET 语言实现)。所有插件实现的接口都是用C#实现的。托管 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
文件可能与托管 C++ DLL 不在同一目录中。这意味着“IMyPluginInterface”类型在运行时不可用,并引发异常。
我之前问过是否有可能影响解析通过#using
语句引用的 DLL 时使用的查找路径。不幸的是,这并没有产生任何结果。
可能有不同的方法吗?可以将通过引用的类型#using
编译到托管 C++ DLL 中吗?也许其他人有完全不同的解决方案?