从Managed C ++ dll对象调用方法

时间:2011-05-19 12:53:49

标签: c# reflection dll object .net-assembly

我使用

在C#中加载我的dll
Assembly assembly = Assembly.LoadFrom(dllPath); // late binding
Type classType = assembly.GetType("Namespace.Classname"); 
object readerInterface = Activator.CreateInstance(classType);

但如何在没有

的情况下访问readerInterface中的方法/成员
type.InvokeMember("Methodname", BindingFlags.InvokeMethod |             
    BindingFlags.Instance | BindingFlags.Public, null, readerInterface, null);

- >以readerInterface.write()的形式; ???

非常感谢!

迎接leon22

2 个答案:

答案 0 :(得分:2)

假设您不能仅在项目中引用程序集C#...让C ++ / CLI对象实现一个接口并将其强制转换为该接口,然后正常使用它。

1)使用适当的方法在C#中声明您的接口

public interface IFoo
{
    SomeMethod()
}

2)Implement the interface on your C++/CLI object

3)将您通过反射创建的对象强制转换为该接口

object readerInterface = Activator.CreateInstance(classType);
IFoo myFoo = readerInterfces as IFoo;

答案 1 :(得分:0)

在c#3中,您必须使用反射或让对象实现已知的接口。

在C#4中,您可以使用动态代替。 (仍然会使用反射,但语法更好)