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 虚拟目录的基本身份验证。
- 文件 -> 新建 -> 新项目
创建一个新的
CSGetObject
Visual 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)。
关注点
就是这样!
历史
刚刚发布。