public void CanCreateNamedConcreteObjectByAskingForNamedInterface()
        {
            string config =
                @"<object-builder-config xmlns=""pag-object-builder"">
               <build-rules>
						<build-rule type="""                         + FullNameSimpleObject + @""" name=""Foo"" mode=""Instance"">
							<constructor-params>
								<value-param type=""System.Int32"">12</value-param>
							</constructor-params>
						</build-rule>
						<build-rule name=""sm2"" type="""                         + FullNameISimpleObject + @""" mode=""Instance"">
							<mapped-type type="""                             + FullNameSimpleObject + @""" name=""Foo""/>
						</build-rule>
						<build-rule type="""                         + FullNameISimpleObject + @""" mode=""Instance"">
							<mapped-type type="""                             + FullNameSimpleObject + @"""/>
						</build-rule>
					</build-rules>
				</object-builder-config>"                ;

            Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config));
            Locator locator = CreateLocator();

            ISimpleObject sm1 = builder.BuildUp <ISimpleObject>(locator, null, null);
            ISimpleObject sm2 = builder.BuildUp <ISimpleObject>(locator, "sm2", null);

            Assert.IsNotNull(sm1);
            Assert.IsNotNull(sm2);
            Assert.IsTrue(sm1 is SimpleObject);
            Assert.IsTrue(sm2 is SimpleObject);
            Assert.AreEqual(0, ((SimpleObject)sm1).IntParam);
            Assert.AreEqual(12, ((SimpleObject)sm2).IntParam);
        }
Пример #2
0
        private static void QueryInterfacesUsingManifest(object obj)
        {
            Console.WriteLine(MethodBase.GetCurrentMethod().Name);
            Console.WriteLine("---------------------------");
            IRegFreeComRotClass face = null;

            face = obj as IRegFreeComRotClass;
            if (face == null)
            {
                NRegFreeCom.ActivationContext.UsingManifestDo("RegFreeCom.OutOfProcClient.Win32.Dependencies.manifest", () =>
                {
                    face = obj as IRegFreeComRotClass;
                });
            }

            if (face != null)
            {
                Console.WriteLine(typeof(IRegFreeComRotClass));
                Console.WriteLine(face.Info);
                face.Ping();
                face.Request("Hello from " + Process.GetCurrentProcess().ProcessName);
                try
                {
                    ISimpleObject sf = face.Create();
                    Console.WriteLine(typeof(ISimpleObject) + " " + sf.Info + " " + sf.FloatProperty);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }

            Console.WriteLine("---------------------------");
        }
Пример #3
0
 public static void AfterConstruction(ISimpleObject obj)
 {
     obj.CreateBy   = SecuritySystem.CurrentUserName;
     obj.ModifyBy   = obj.CreateBy;
     obj.CreateDate = DateTime.Now;
     obj.ModifyData = DateTime.Now;
 }
Пример #4
0
        static void Main(string[] args)
        {
            var p = new Program();



            var loader = new AssemblySystem();


            var module = loader.LoadFrom(loader.GetAnyCpuPath(loader.BaseDirectory), "RegFreeComNativeConsumer.dll");

            //call dll entry point if needed -
            //var main = module.GetDelegate<DEF.DllMain>();//enty point is not declared as export
            //bool result = main(module.Handle, FDW_REASONS.DLL_PROCESS_ATTACH, IntPtr.Zero);
            //if (!result) throw new Exception("Failed to init dll");

            // push managed COM service into native method
            _service = new RegFreeSimpleObject();
            _service.FloatProperty = 42;
            _pointer = Marshal.GetIUnknownForObject(_service);
            var initialize = module.GetDelegate <Initialize>();
            int error      = initialize(_pointer);

            if (error != 0)
            {
                throw new Exception();
            }

            EnsureGC();
            _service.RaiseEnsureGCIsNotObstacle();

            // return string from C

            IntPtr strPtr = IntPtr.Zero;

            module.GetDelegate <GetStringResult>()(out strPtr);
            var str = Marshal.PtrToStringUni(strPtr);

            Marshal.FreeBSTR(strPtr);
            Console.WriteLine(str);

            // return array of COM services which return pointers
            var com            = loader.LoadFrom(loader.GetAnyCpuPath(loader.BaseDirectory), "RegFreeComNativeImplementer");
            var servicesGetter = com.GetDelegate <GetComInterface>();

            object[] services;
            servicesGetter(out services);
            var    srv = (RegFreeComNativeInterfacesLib.IMyService)services[0];
            IntPtr otherHandle;

            srv.GetSomeHanlde(out otherHandle);
            var srvRepeat = (RegFreeComNativeInterfacesLib.IMyService)Marshal.GetObjectForIUnknown(otherHandle);

            // pointer to itself was used to simplify testing
            Assert.AreEqual(services[0], srvRepeat);

            Console.ReadKey();
        }
Пример #5
0
        public void CanCreateConcreteObjectByAskingForInterface()
        {
            Builder builder = new Builder();

            builder.Policies.Set <ITypeMappingPolicy>(new TypeMappingPolicy(typeof(SimpleObject), null), typeof(ISimpleObject), null);
            Locator locator = CreateLocator();

            ISimpleObject sm = builder.BuildUp <ISimpleObject>(locator, null, null);

            Assert.IsNotNull(sm);
            Assert.IsTrue(sm is SimpleObject);
        }
Пример #6
0
        static void Main(string[] args)
        {
            var p = new Program();

            var loader = new AssemblySystem();

            var module = loader.LoadFrom(loader.GetAnyCpuPath(loader.BaseDirectory), "RegFreeComNativeConsumer.dll");

            //call dll entry point if needed -
            //var main = module.GetDelegate<DEF.DllMain>();//enty point is not declared as export
            //bool result = main(module.Handle, FDW_REASONS.DLL_PROCESS_ATTACH, IntPtr.Zero);
            //if (!result) throw new Exception("Failed to init dll");

            // push managed COM service into native method
            _service = new RegFreeSimpleObject();
            _service.FloatProperty = 42;
            _pointer = Marshal.GetIUnknownForObject(_service);
            var initialize = module.GetDelegate<Initialize>();
            int error = initialize(_pointer);
            if (error != 0) throw new Exception();

            EnsureGC();
            _service.RaiseEnsureGCIsNotObstacle();

            // return string from C

            IntPtr strPtr = IntPtr.Zero;
            module.GetDelegate<GetStringResult>()(out strPtr);
            var str = Marshal.PtrToStringUni(strPtr);
            Marshal.FreeBSTR(strPtr);
            Console.WriteLine(str);

            // return array of COM services which return pointers
            var com = loader.LoadFrom(loader.GetAnyCpuPath(loader.BaseDirectory), "RegFreeComNativeImplementer");
            var servicesGetter = com.GetDelegate<GetComInterface>();
            object[] services;
            servicesGetter(out services);
            var srv = (RegFreeComNativeInterfacesLib.IMyService) services[0];
            IntPtr otherHandle;
            srv.GetSomeHanlde(out otherHandle);
            var srvRepeat = (RegFreeComNativeInterfacesLib.IMyService)Marshal.GetObjectForIUnknown(otherHandle);
            // pointer to itself was used to simplify testing
            Assert.AreEqual(services[0],srvRepeat);

            Console.ReadKey();
        }
        public void CanCreateConcreteObjectByAskingForInterface()
        {
            string config =
                @"<object-builder-config xmlns=""pag-object-builder"">
               <build-rules>
						<build-rule type="""                         + FullNameISimpleObject + @""" mode=""Instance"">
							<mapped-type type="""                             + FullNameSimpleObject + @""" />
						</build-rule>
					</build-rules>
				</object-builder-config>"                ;

            Builder builder = new Builder(ObjectBuilderXmlConfig.FromXml(config));
            Locator locator = CreateLocator();

            ISimpleObject sm = builder.BuildUp <ISimpleObject>(locator, null, null);

            Assert.IsNotNull(sm);
            Assert.IsTrue(sm is SimpleObject);
        }
Пример #8
0
        public void CanCreateNamedConcreteObjectByAskingForNamedInterface()
        {
            Builder           builder = new Builder();
            ConstructorPolicy policy  = new ConstructorPolicy(new ValueParameter <int>(12));

            builder.Policies.Set <ICreationPolicy>(policy, typeof(SimpleObject), "Foo");
            builder.Policies.Set <ITypeMappingPolicy>(new TypeMappingPolicy(typeof(SimpleObject), null), typeof(ISimpleObject), null);
            builder.Policies.Set <ITypeMappingPolicy>(new TypeMappingPolicy(typeof(SimpleObject), "Foo"), typeof(ISimpleObject), "sm2");
            Locator locator = CreateLocator();

            ISimpleObject sm1 = builder.BuildUp <ISimpleObject>(locator, null, null);
            ISimpleObject sm2 = builder.BuildUp <ISimpleObject>(locator, "sm2", null);

            Assert.IsNotNull(sm1);
            Assert.IsNotNull(sm2);
            Assert.IsTrue(sm1 is SimpleObject);
            Assert.IsTrue(sm2 is SimpleObject);
            Assert.AreEqual(0, ((SimpleObject)sm1).IntParam);
            Assert.AreEqual(12, ((SimpleObject)sm2).IntParam);
        }
		public AttributedConstructorMultipleImport(ISimpleObject[] simpleObjects)
		{
			Count = simpleObjects.Length;
		}
Пример #10
0
		public MultipleConstructor(IBasicService basicService, ISimpleObject simpleObject)
		{
			BasicService = basicService;

			SimpleObject = simpleObject;
		}
Пример #11
0
 public PickConstructorClass(ISimpleObject obj)
 {
     Which = 1;
 }
Пример #12
0
 public ImportSingleSimpleObject(ISimpleObject simpleObject)
 {
     SimpleObject = simpleObject;
 }
		public ShallowDependent (ISimpleObject simpleObject)
		{
			SimpleObject = simpleObject;
		}
Пример #14
0
 public PickConstructorClass(ISimpleObject obj, ISimpleObject obj2)
 {
     Which = 2;
 }
		public MultipleParameterObject (IShallowDependent shallowDependent, ISimpleObject simpleObject)
		{
			ShallowDependent = shallowDependent;
			SimpleObject = simpleObject;
		}
Пример #16
0
 public FinalizableResource()
 {
     _obj = new SimpleObject();
 }
Пример #17
0
 public SecondaryObject(ISimpleObject simpleObject)
 {
     SimpleObject = simpleObject;
 }
Пример #18
0
 public OptionalServiceConstructor(ISimpleObject simpleObject = null)
 {
     SimpleObject = simpleObject;
 }
Пример #19
0
 public FinalizableResource()
 {
     _obj = new SimpleObject();
 }
Пример #20
0
 public static void OnSaving(ISimpleObject obj)
 {
     obj.ModifyBy   = SecuritySystem.CurrentUserName;
     obj.ModifyData = DateTime.Now;
 }
		public void ImportMethod(ISimpleObject[] simpleObjects)
		{
			Count = simpleObjects.Length;
		}
Пример #22
0
 public ImportSingleSimpleObject(ISimpleObject simpleObject)
 {
     SimpleObject = simpleObject;
 }
Пример #23
0
 public ImportKeyedE(ISimpleObject simpleObject)
 {
     SimpleObject = simpleObject;
 }
Пример #24
0
		public AttributedClassMultipleImport(ISimpleObject[] simpleObjects)
		{
			SimpleObjects = simpleObjects;
		}
Пример #25
0
 public OptionalIntServiceConstructor(ISimpleObject simpleObject, int value = DefaultIntValue)
 {
     Value        = value;
     SimpleObject = simpleObject;
 }
Пример #26
0
		public ImportArrayService(ISimpleObject[] simpleObjects)
		{
			Assert.NotNull(simpleObjects);
			Assert.Equal(5, simpleObjects.Length);
		}