比如我在DLL里写了一个函数TextBox_click(,);
然后想在程序里通过字符串的方式来调用这个函数。
如想把"TextBox_click(5,6)"这个字符串作为函数来运行,不知可以用什么函数,请知道的大虾能指点一下

解决方案 »

  1.   

    Try search "反射" anywhere.
      

  2.   

    你可以使用InvokeMember,参看
    ms-help://MS.MSDNQTR.2003APR.1033/cpref/html/frlrfsystemtypeclassinvokemembertopic1.htm
      

  3.   

    使用反射,加载dll,然后根据方法名获取MethodInfo,接着使用参数调用即可
      

  4.   

    参看
    http://blog.csdn.net/knight94/archive/2006/04/10/657527.aspx
      

  5.   

    //调用方法示例
                int obj = 100;
                String s = (String) t.InvokeMember("ToString", //方法名
                BindingFlags.DeclaredOnly | 
                BindingFlags.Public | BindingFlags.NonPublic | 
                BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
            Console.WriteLine("ToString: " + s);
      

  6.   

    Type.InvokeMember 方法 (String, BindingFlags, Binder, Object, Object[])请参见
    Type 类 | Type 成员 | System 命名空间 | Type.InvokeMember 重载列表 | String | Binder | DefaultBinder | BindingFlags | ParameterModifier | ParameterAttributes | CultureInfo | ReflectionPermission | Type 成员(Visual J# 语法) | C++ 托管扩展编程 
    要求
    平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列, .NET Framework 精简版 - Windows CE .NET, 公共语言基础结构 (CLI) 标准.NET Framework 安全性:  ReflectionPermission。关联的枚举:ReflectionPermissionFlag.MemberAccess 
    SecurityPermission。关联的枚举:SecurityPermissionFlag.UnmanagedCode 
    语言
    C#C++JScriptVisual Basic全部显示
    使用指定的绑定约束并匹配指定的参数列表,调用指定成员。[Visual Basic]
    Overloads Public Function InvokeMember( _
       ByVal name As String, _
       ByVal invokeAttr As BindingFlags, _
       ByVal binder As Binder, _
       ByVal target As Object, _
       ByVal args() As Object _
    ) As Object[C#]
    public object InvokeMember(
       string name,
       BindingFlags invokeAttr,
       Binder binder,
       object target,
       object[] args
    );[C++]
    public: Object* InvokeMember(
       String* name,
       BindingFlags invokeAttr,
       Binder* binder,
       Object* target,
       Object* args __gc[]
    );[JScript]
    public function InvokeMember(
       name : String,
       invokeAttr : BindingFlags,
       binder : Binder,
       target : Object,
       args : Object[]
    ) : Object;参数
    name 
    String,它包含要调用的构造函数、方法、属性或字段成员的名称。 
    - 或 - 空字符串 (""),表示调用默认成员。 invokeAttr 
    一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一,如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public | BindingFlags.Instance。 
    binder 
    一个 Binder 对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。 
    - 或 - 若为空引用(Visual Basic 中为 Nothing),则使用 DefaultBinder。 target 
    要在其上调用指定成员的 Object。 
    args 
    包含传递给要调用的成员的参数的数组。 
    返回值
    表示被调用成员的返回值的 Object。
    下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员: 为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。 
    指定 BindingFlags.Public 可在搜索中包含公共成员。 
    指定 BindingFlags.NonPublic 可在搜索中包含非公共成员(即私有成员和受保护的成员)。 
    指定 BindingFlags.FlattenHierarchy 可包含层次结构上的静态成员。 
    下列 BindingFlags 修饰符标志可用于更改搜索的执行方式: BindingFlags.IgnoreCase,表示忽略 name 的大小写。 
    BindingFlags.DeclaredOnly,仅搜索 Type 上声明的成员,而不搜索被简单继承的成员。 
    可以使用下列 BindingFlags 调用标志表示要对成员采取的操作: CreateInstance,表示调用构造函数。忽略 name。对其他调用标志无效。 
    InvokeMethod,表示调用方法,而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。 
    GetField,表示获取字段值。对 SetField 无效。 
    SetField,表示设置字段值。对 GetField 无效。 
    GetProperty,表示获取属性。对 SetProperty 无效。 
    SetProperty 表示设置属性。对 GetProperty 无效。 
    有关更多信息,请参见 System.Reflection.BindingFlags。如果下列条件为真,则将调用方法: 方法声明中的参数个数等于 args 数组中的参数个数(除非在成员上定义了默认参数)。并且 
    每个参数的类型可以被联编程序转换为参数类型。 
    联编程序将查找所有的匹配方法。查找这些方法时基于所请求的绑定类型(BindingFlags 值 InvokeMethod、GetProperty 等)。方法集按名称、参数数目、联编程序中定义的一组搜索修饰符进行筛选。选择方法后,方法即被调用。同时检查可访问性。搜索可能基于与此方法关联的可访问性特性来控制搜索哪些方法集。Binder 类的 Binder.BindToMethod 方法负责选择要调用的方法。默认联编程序选择最精确的匹配。对于完全受信任的代码将忽略访问限制;即,只要代码是完全受信任的,就可以通过 System.Reflection 访问和调用私有的构造函数、方法、字段和属性。通过指定 BindingFlags.SetField,可以用 Type.InvokeMember 将字段设置为特殊值。例如,如果要设置 C 类上名为 F 的公共实例字段,并且 F 为 String,则可使用下列代码:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{"stringsnew value"}); 如果 F 为 String[],则可使用下列代码:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C,new Object{new String[]{"a","z","c","d"}); 这会将字段 F 初始化为此新数组。还可用 Type.InvokeMember 设置数组中的某个位置(通过提供值索引),然后通过使用下列代码设置下一个值:typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{1, "b"}); 这会将 F 在数组中所占据的字符串“z”更改为字符串“b”。