Click here to Skip to main content
15,891,529 members
Articles / Programming Languages / Objective C

Using C Calling Convention Callback Functions in C# and VB - The Easy Way

Rate me:
Please Sign up or sign in to vote.
5.00/5 (31 votes)
13 Sep 20053 min read 318.2K   4K   68  
Provides an easy way to use C calling convention callback functions in C# and VB
using System;
using System.Reflection;

namespace App.Utils
{
	/// <summary>
	/// Provides reflection helper methods.
	/// </summary>
	public sealed class Reflector
	{
		private Reflector() {}

		public static object CreateInstance( Assembly assembly, string name, params object[] parameters )
		{
			if( assembly == null )
			{
				throw new ArgumentNullException( "assembly" );
			}

			return CreateInstance( assembly.GetType( name ), parameters );
		}

		public static object CreateInstance( Type type, params object[] parameters )
		{
			return Activator.CreateInstance(
				type,
				BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
				null,
				parameters,
				null
				);
		}

		public static object InvokeMethod( Type type, string name, object instance, params object[] parameters )
		{
			return InvokeMember( type, name, instance, BindingFlags.InvokeMethod | BindingFlags.Instance, parameters );
		}
 
		public static object GetProperty( Type type, string name, object instance )
		{
			return InvokeMember( type, name, instance, BindingFlags.GetProperty | BindingFlags.Instance );
		}
 
		public static object SetProperty( Type type, string name, object instance, object value )
		{
			return InvokeMember( type, name, instance, BindingFlags.SetProperty | BindingFlags.Instance, value );
		}
 
		public static object GetField( Type type, string name, object instance )
		{
			return InvokeMember( type, name, instance, BindingFlags.GetField | BindingFlags.Instance );
		}
 
		public static object SetField( Type type, string name, object instance, object value )
		{
			return InvokeMember( type, name, instance, BindingFlags.SetField | BindingFlags.Instance, value );
		}

		public static object InvokeStaticMethod( Type type, string name, params object[] parameters )
		{
			return InvokeMember( type, name, null, BindingFlags.InvokeMethod | BindingFlags.Static, parameters );
		}

		public static object InvokeMember( Type type, string name, object instance, BindingFlags flags, params object[] parameters )
		{
			return type.InvokeMember( 
				name, 
				BindingFlags.Public | BindingFlags.NonPublic | flags,
				null,
				instance,
				parameters
				);
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
Software Developer (Senior)
Bulgaria Bulgaria
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions