2011-05-19 283 views
0

我加載我的DLL在C#與呼叫方法

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

+0

是.net 4.0還是3.5? – 2011-05-19 12:54:58

+0

3.5 .net on Visual Studio 2008 – leon22 2011-05-19 13:20:38

+0

如果您有一個C++/CLI DLL,爲什麼不從C#項目中引用該DLL? – porges 2011-05-23 05:10:38

回答

1

假設你不能只是引用組件項目中的C#...有C++/CLI對象實現一個接口,並將其轉換爲一個接口上,那麼就使用它作爲正常。

1)使用任何方法都是適當

public interface IFoo 
{ 
    SomeMethod() 
} 

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

3)投您通過反射創建到該接口

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

好的。你有沒有一個例子界面如何? – leon22 2011-05-19 13:48:02

+0

@ leon22增加了一些細節。 – Yaur 2011-05-19 14:00:27

0

對象聲明在C#的接口在c#3中,您必須使用反射或讓對象實現已知的接口。

在C#4中,您可以使用動態代替。 (仍然會使用反射但語法更好)