Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A C# alternative for the Visual Basic GetObject function

0.00/5 (No votes)
7 Dec 2006 1  
Make the BindToMoniker method work like the Visual Basic GetObject function.

Introduction

We needed to use an alternative to the Visual Basic GetObject function in C#. Marshal.BindToMoniker would do. But we can not, as in Visual Basic, directly reference the object returned and its methods or properties. We use the obj.GetType().InvokeMember method for this purpose. In this example, we will set the IIS Virtual Directory Basic Authentication using the IIsWebService COM interface.

  1. File -> New -> New Project

    Create a new CSGetObject Visual C# Windows application.

  2. From the main menu, click View -> Tool box.

  3. Drag a Button into the form.

  4. Double click the Button1.

  5. Replace the button1_Click method with the following code:

private void button1_Click(object sender, System.EventArgs e)
{
  try 
  {
  Object obj = Marshal.BindToMoniker("IIS://LocalHost/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;

to the imports. Build the solution (F7), and run the application (F5).

Points of Interest

That's it!

History

Just posted.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here