Ejemplo n.º 1
0
        /// <summary>
        /// dynamically loads the msieve dll file and sets the callbacks
        /// </summary>
        private void initMsieveDLL()
        {
            msieveDLL = Msieve.GetMsieveDLL();
            msieve    = msieveDLL.GetType("Msieve.msieve");

            //init msieve with callbacks:
            MethodInfo initMsieve                = msieve.GetMethod("initMsieve");
            Object     callback_struct           = Activator.CreateInstance(msieveDLL.GetType("Msieve.callback_struct"));
            FieldInfo  prepareSievingField       = msieveDLL.GetType("Msieve.callback_struct").GetField("prepareSieving");
            FieldInfo  putTrivialFactorlistField = msieveDLL.GetType("Msieve.callback_struct").GetField("putTrivialFactorlist");
            Delegate   prepareSievingDel         = MulticastDelegate.CreateDelegate(msieveDLL.GetType("Msieve.prepareSievingDelegate"), this, "prepareSieving");
            Delegate   putTrivialFactorlistDel   = MulticastDelegate.CreateDelegate(msieveDLL.GetType("Msieve.putTrivialFactorlistDelegate"), this, "putTrivialFactorlist");

            prepareSievingField.SetValue(callback_struct, prepareSievingDel);
            putTrivialFactorlistField.SetValue(callback_struct, putTrivialFactorlistDel);
            initMsieve.Invoke(null, new object[1] {
                callback_struct
            });
        }