//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)); }
public void UnSubscribe(IButtonObserver observer) { this.observers.Remove(observer); }
public void Subscribe(IButtonObserver observer) { this.observers.Add(observer); }