using BF = System.Reflection.BindingFlags; namespace ExcelLateBinding { public static class LateBindings { public static object GetInstance(string appName) { return System.Runtime.InteropServices.Marshal.GetActiveObject(appName); } public static object CreateInstance(string appName) { return System.Activator.CreateInstance(System.Type.GetTypeFromProgID(appName)); } public static object GetOrCreateInstance(string appName) { try { return GetInstance(appName); } catch { return CreateInstance(appName); } } public static object Get(object obj, string propName) { return Get(obj, propName, null); } public static object Get(object obj, string propName, object parameter) { return Get(obj, propName, new object[1] { parameter }); } public static object Get(object obj, string propName, object[] parameter) { return obj.GetType().InvokeMember(propName, BF.GetProperty, null, obj, parameter); } public static void Set(object obj, string propName, object parameter) { Set(obj, propName, new object[1] { parameter }); } public static void Set(object obj, string propName, object[] parameter) { obj.GetType().InvokeMember(propName, BF.SetProperty, null, obj, parameter); } public static object Invoke(object obj, string methName) { return Invoke(obj, methName, null); } public static object Invoke(object obj, string methName, object parameter) { return Invoke(obj, methName, new object[1] { parameter }); } public static object Invoke(object obj, string methName, object[] parameter) { return obj.GetType().InvokeMember(methName, BF.InvokeMethod, null, obj, parameter); } public static void ReleaseInstance(object obj) { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); } } }