65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (3投票s)

2006年12月7日

viewsIcon

55344

使 BindToMoniker 方法像 Visual Basic GetObject 函数一样工作。

引言

我们需要在 C# 中使用 Visual Basic GetObject 函数的替代方案。Marshal.BindToMoniker 可以做到这一点。但我们不能像在 Visual Basic 中那样直接引用返回的对象及其方法或属性。我们使用 obj.GetType().InvokeMember 方法来实现这个目的。在这个例子中,我们将使用 IIsWebService COM 接口设置 IIS 虚拟目录的基本身份验证。

  1. 文件 -> 新建 -> 新项目

    创建一个新的 CSGetObject Visual C# Windows 应用程序。

  2. 从主菜单中,单击 视图 -> 工具箱。

  3. 将一个 Button 拖动到窗体中。

  4. 双击 Button1

  5. 用以下代码替换 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)。

关注点

就是这样!

历史

刚刚发布。

© . All rights reserved.