C#如何将类实例传递给C#dll方法?
我通过以下代码加载并获得了一个dll实例:C#如何将类实例传递给C#dll方法?,c#,dll,.net-assembly,C#,Dll,.net Assembly,我通过以下代码加载并获得了一个dll实例: ApiClass api = new ApiClass(this); Assembly SampleAssembly = Assembly.LoadFrom(@"C:\plugin1.dll"); Type myType = SampleAssembly.GetTypes()[0]; MethodInfo Method = myType.GetMethod("onRun"); object myInstance = Activator.CreateI
ApiClass api = new ApiClass(this);
Assembly SampleAssembly = Assembly.LoadFrom(@"C:\plugin1.dll");
Type myType = SampleAssembly.GetTypes()[0];
MethodInfo Method = myType.GetMethod("onRun");
object myInstance = Activator.CreateInstance(myType);
try
{
object retVal = Method.Invoke(myInstance, new object[] { api });
}
以下是IApi接口的代码:
namespace PluginEngine
{
public interface IApi
{
void showMessage(string message);
void closeApplication();
void minimizeApplication();
}
}
我只是将IApi复制到dll项目并构建它。这是dll的代码:
namespace plugin1
{
public class Class1
{
public void onRun(PluginEngine.IApi apiObject)
{
//PluginEngine.IApi api = (IApi)apiObject;
apiObject.showMessage("Hi there...");
}
}
}
但是当我想调用dll方法时,出现了一个错误:
类型为“PluginEngine.ApiClass”的对象无法转换为类型为“PluginEngine.IApi”
我刚刚将IApi复制到dll项目中
这就是你出错的地方,你不能复制接口。您正在与.NET中的类型标识概念进行斗争。像IApi这样的类型的标识不仅取决于它的名称,还取决于它来自哪个程序集。因此您有两种不同的IApi类型,插件中的一种与主机中的一种不匹配
您需要创建另一个类库项目,其中包含主机和插件使用的类型。比如IApi。在宿主项目和插件项目中添加对此库项目的引用。现在只有一个IApi。什么是
myType
什么是onRun
?@p.s.w.g myType是reflection
,而onRun
是我要调用它的dll的方法的名称。让我告诉您,我搜索了这个错误,发现大多数结果都是关于程序集引用的,它们是不同的。谢谢我的意思是,请显示反射
(如果这是您加载到myType
)和onRun
@p.s.w.g中的类型)的定义这是我定义它们的地方。我到底应该展示什么?非常感谢。在不使用任何库的情况下,有没有办法做到这一点或类似的事情?我已经可以将常规类型(integer、long和…)传递给dll,并使用此参数调用方法。没有你说的方法,有没有办法把复杂类型传递给dll?谢谢