Visual Basic GetObject 函数的 C# 替代方案






4.50/5 (3投票s)
2006年12月7日

55344
使 BindToMoniker 方法像 Visual Basic GetObject 函数一样工作。
引言
我们需要在 C# 中使用 Visual Basic GetObject 函数的替代方案。Marshal.BindToMoniker 可以做到这一点。但我们不能像在 Visual Basic 中那样直接引用返回的对象及其方法或属性。我们使用 obj.GetType().InvokeMember 方法来实现这个目的。在这个例子中,我们将使用 IIsWebService COM 接口设置 IIS 虚拟目录的基本身份验证。
- 文件 -> 新建 -> 新项目创建一个新的 CSGetObjectVisual C# Windows 应用程序。
- 
从主菜单中,单击 视图 -> 工具箱。 
- 
将一个 Button拖动到窗体中。
- 
双击 Button1。
- 
用以下代码替换 button1_Click方法
private void button1_Click(object sender, System.EventArgs e)
{
  try 
  {
  Object obj = Marshal.BindToMoniker("IIS:///W3svc/1/Root");
  // Read Property
  bool v = (bool) obj.GetType().InvokeMember("AuthBasic", 
     BindingFlags.DeclaredOnly | 
     BindingFlags.Public | BindingFlags.NonPublic | 
     BindingFlags.Instance | 
     BindingFlags.GetProperty, null, obj, null);
  MessageBox.Show(v.ToString ());
  // Set Property
  // Params: Property or Method, BindingFlags, Binder,
  // Object, array of values or method params
  obj.GetType().InvokeMember("AuthBasic", 
     BindingFlags.DeclaredOnly | 
     BindingFlags.Public | BindingFlags.NonPublic | 
     BindingFlags.Instance | BindingFlags.SetProperty, 
     null, obj, new Object[] {!v});
  // Invoke Method
  obj.GetType().InvokeMember("SetInfo", 
     BindingFlags.DeclaredOnly | 
     BindingFlags.Public | BindingFlags.NonPublic | 
     BindingFlags.Instance | BindingFlags.InvokeMethod, 
     null, obj, null);
  }
  catch (Exception er)
  {
  MessageBox.Show(er.Message, "Error!!");
  }
} 
Add
using System.Runtime.InteropServices;
using System.Reflection;
到导入项。构建解决方案 (F7),并运行应用程序 (F5)。
关注点
就是这样!
历史
刚刚发布。
