示例#1
0
    public static void Main()
    {
        Bus bus = Bus.Session;

        string     bus_name = "org.ndesk.test";
        ObjectPath path     = new ObjectPath("/org/ndesk/test");
        ObjectPath cppath   = new ObjectPath("/org/ndesk/CodeProvider");

        IDemoOne demo;

        if (bus.RequestName(bus_name) == RequestNameReply.PrimaryOwner)
        {
            //create a new instance of the object to be exported
            demo = new Demo();
            bus.Register(path, demo);

            DCodeProvider dcp = new DCodeProvider();
            bus.Register(cppath, dcp);

            //run the main loop
            while (true)
            {
                bus.Iterate();
            }
        }
        else
        {
            //import a remote to a local proxy
            //demo = bus.GetObject<IDemo> (bus_name, path);
            demo = bus.GetObject <DemoProx> (bus_name, path);
            //RunTest (demo);

            ICodeProvider idcp = bus.GetObject <ICodeProvider> (bus_name, cppath);

            DMethodInfo dmi = idcp.GetMethod("DemoProx", "SayRepeatedly");

            DArgumentInfo[] fields = idcp.GetFields("DemoProx");
            foreach (DArgumentInfo field in fields)
            {
                Console.WriteLine("Field: " + field.Name);
            }

            //DynamicMethod dm = new DynamicMethod (dmi.Name, typeof(void), new Type[] { typeof(object), typeof(int), typeof(string) }, typeof(DemoBase));
            //ILGenerator ilg = dm.GetILGenerator ();
            //dmi.Implement (ilg);

            DynamicMethod dm = dmi.GetDM();

            SayRepeatedlyHandler cb = (SayRepeatedlyHandler)dm.CreateDelegate(typeof(SayRepeatedlyHandler), demo);
            int retVal;
            retVal = cb(12, "Works!");
            Console.WriteLine("retVal: " + retVal);

            /*
             * for (int i = 0 ; i != dmi.Code.Length ; i++) {
             *      if (!dmi.Code[i].Emit(ilg))
             *              throw new Exception(String.Format("Code gen failure at i={0} {1}", i, dmi.Code[i].opCode));
             * }
             */
            //SayRepeatedlyHandler
        }
    }