C#如何将类实例传递给c#dll方法?

时间:2013-11-14 01:25:30

标签: 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.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方法时出错:

Object of type 'PluginEngine.ApiClass' cannot be converted to type 'PluginEngine.IApi'

1 个答案:

答案 0 :(得分:2)

  

我刚刚将IApi复制到dll项目

那是你出错的地方,你无法复制界面。您正在与.NET中类型标识的概念进行斗争。像IApi这样的类型的身份不仅仅取决于它的名称,它的组合也很重要。所以你有两个不同的IApi类型,插件中的那个与主机中的类型不匹配。

您需要创建另一个包含主机和插件使用的类型的类库项目。像IApi一样。在主机项目和插件项目中添加对此库项目的引用。现在只有一个 IApi。