static void Main(string[] args)
        {
            // test
            var improved = new NewLibrary.ImprovedClass();

            improved.InvokeComMethod();

            //// COM client
            //var unmanagedObject = (ISimpleUnmanagedObject)Activator.CreateInstance(Type.GetTypeFromProgID("Noseratio.SimpleUnmanagedObject"));
            //unmanagedObject.InvokeComMethod(improved);

            improved.Dispose();
            improved = null;

            // test ref counting
            GC.Collect(generation: GC.MaxGeneration, mode: GCCollectionMode.Forced, blocking: false);
            Console.WriteLine("Press Enter to exit.");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            // test
            var improved = new NewLibrary.ImprovedClass();

            improved.InvokeComMethod();

            //// COM client
            //var unmanagedObject = (ISimpleUnmanagedObject)Activator.CreateInstance(Type.GetTypeFromProgID("Noseratio.SimpleUnmanagedObject"));
            //unmanagedObject.InvokeComMethod(improved);

            improved.Dispose();
            improved = null;

            // need to work out the reference counting for GC to work correctly
            GC.Collect();

            Console.WriteLine("Press Enter to exit.");
            Console.ReadLine();
        }