DLL代码:
using System;
namespace clsTestDll
{
public class TestDll
{
private string strName;
public TestDll()
{
strName = "";
}
public string GetValue(int nCount)
{
return string.Format("Count is {0}!", nCount);
}
public static string GetNewValue(int nCount)
{
return string.Format("New count is {0}!", nCount);
}
public string Name
{
get { return strName; }
set { strName = value; }
}
}
}
调用程序代码:
using System;
using System.Reflection;
namespace TestString
{
class Program
{
public static void Main()
{
Assembly assembly = Assembly.LoadFrom(@"E:\clsTestDll.dll");
Type type = assembly.GetType("clsTestDll.TestDll");
/*调用DLL中的静态方法*/
string returnStaticStr = (string)type.InvokeMember(
"GetNewValue",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.Static
| BindingFlags.InvokeMethod,
null, null, new object[] { 12 });
/*调用DLL中的非静态方法*/
//1.新建一个object
Object newObject = type.InvokeMember(
null,
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.CreateInstance,
null, null, null);
//2.使用object调用DLL中的非静态方法
string returnNostaticStr = (string)type.InvokeMember(
"GetValue",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.InvokeMethod,
null, newObject, new object[] { 20 });
/*调用DLL中的属性*/
//1.设置属性的值
type.InvokeMember(
"Name",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.SetProperty,
null, newObject, new object[] { "PropertyTest" });
//2.调用属性
string getProperty = (string)type.InvokeMember(
"Name",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.GetProperty,
null, newObject, null);
Console.WriteLine(returnStaticStr);
Console.WriteLine(returnNostaticStr);
Console.WriteLine(getProperty);
Console.ReadKey();
}
}
}
输出结果:
New count is 12!
Count is 20!
PropertyTest
解释:
public object InvokeMember(string,BindingFlags,Binder,object,object[]);
string:要调用的成员名
BindingFlags:要调用的函数的属性,可以组合,System.Reflection.BindingFlags
Binder:高级内容,先不看
object:调用该成员的实例
object[]:传给要调用的函数的参数列表或者要给属性赋的值