internal static void CopyIn(ref OpenSplice.Gapi.gapi_publisherDataWriterListener from, IntPtr to, int offset)
        {
            // Set listener_data field
            //            Marshal.WriteIntPtr(to, offset + offset_listener_data, from.listener_data);
            BaseMarshaler.Write(to, offset + offset_listener_data, IntPtr.Zero);

            // Set callback fields
            BaseMarshaler.Write(to, offset + offset_on_offered_deadline_missed, MarshalHelper.GetIntPtrForDelegate(from.on_offered_deadline_missed));
            BaseMarshaler.Write(to, offset + offset_on_offered_incompatible_qos, MarshalHelper.GetIntPtrForDelegate(from.on_offered_incompatible_qos));
            BaseMarshaler.Write(to, offset + offset_on_liveliness_lost, MarshalHelper.GetIntPtrForDelegate(from.on_liveliness_lost));
            BaseMarshaler.Write(to, offset + offset_on_publication_match, MarshalHelper.GetIntPtrForDelegate(from.on_publication_match));
        }
        internal void CreateListener(out OpenSplice.Gapi.gapi_publisherDataWriterListener listener)
        {
            onOfferedDeadlineMissedDelegate  = PrivateOfferedDeadlineMissed;
            onLivelinessLostDelegate         = PrivateLivelinessLost;
            onOfferedIncompatibleQosDelegate = PrivateOfferedIncompatibleQos;
            onPublicationMatchDelegate       = PrivatePublicationMatched;

            listener = new DDS.OpenSplice.Gapi.gapi_publisherDataWriterListener();
            listener.listener_data = IntPtr.Zero;
            listener.on_offered_deadline_missed  = onOfferedDeadlineMissedDelegate;
            listener.on_liveliness_lost          = onLivelinessLostDelegate;
            listener.on_offered_incompatible_qos = onOfferedIncompatibleQosDelegate;
            listener.on_publication_match        = onPublicationMatchDelegate;
        }
 public PublisherDataWriterListenerMarshaler(ref OpenSplice.Gapi.gapi_publisherDataWriterListener listener)
     : this()
 {
     CopyIn(ref listener, GapiPtr, 0);
     cleanupRequired = true;
 }