C#如何将类实例传递给C#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

我通过以下代码加载并获得了一个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.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?谢谢