コード例 #1
0
        //public abstract void OnButtonClick(T_button_id id);
        //public abstract void OnButtonDoubleClick(T_button_id id);

        public ButtonObserverConnector(IButtonObserver<T_button_id> impl)
        {
            __impl = impl;
            // Wir bauen uns das Interface im Speicher.
            // - 1 Pointer zur Virtual Method Table
            // - danach, weil ein Interface keine Member hat, gleich die Pointer
            //   auf unsere Delegates (1 VTBL + 2 Delegate = 3 Pointer)
            NativePointer = Marshal.AllocHGlobal(IntPtr.Size * 3);

            // Die VTBL zeigt auf die Adresse danach und wird an die erste
            // Stelle geschrieben.
            IntPtr vtblPtr = PtrHelper.Add(NativePointer, IntPtr.Size);
            Marshal.WriteIntPtr(NativePointer, vtblPtr);

            // Nun hintereinander weg die einzelnen Funktionen.
            _downCallBack = new OnButtonDownCallBack(OnButtonDown);
            Marshal.WriteIntPtr(vtblPtr,
                PtrHelper.GetFunctionPointerForDelegate<OnButtonDownCallBack>
                    (_downCallBack, out _onButtonDownBinder));

            _upCallBack = new OnButtonUpCallBack(OnButtonUp);
            Marshal.WriteIntPtr(PtrHelper.Add(vtblPtr, IntPtr.Size),
                PtrHelper.GetFunctionPointerForDelegate<OnButtonUpCallBack>
                    (_upCallBack, out _onButtonUpBinder));

            //_clickCallBack = new onButtonClickCallBack(onButtonClick);
            //Marshal.WriteIntPtr(PtrHelper.Add(vtblPtr, IntPtr.Size * 2),
            //	PtrHelper.GetFunctionPointerForDelegate<onButtonClickCallBack>
            //		(_clickCallBack, out _onButtonClickBinder));

            //_doubleClickCallBack = new onButtonDoubleClickCallBack(onButtonDoubleClick);
            //Marshal.WriteIntPtr(PtrHelper.Add(vtblPtr, IntPtr.Size * 3),
            //	PtrHelper.GetFunctionPointerForDelegate<onButtonDoubleClickCallBack>
            //		(_doubleClickCallBack, out _onButtonDoubleClickBinder));
        }
コード例 #2
0
 public void UnSubscribe(IButtonObserver observer)
 {
     this.observers.Remove(observer);
 }
コード例 #3
0
 public void Subscribe(IButtonObserver observer)
 {
     this.observers.Add(observer);
 }