private IntPtr AddCallbacks() { connectionErrorDelegate = ConnectionError; endOfTrackDelegate = EndOfTrack; getAudioBufferStatsDelegate = GetAudioBufferStats; logMessageDelegate = LogMessage; loggedInDelegate = LoggedIn; loggedOutDelegate = LoggedOut; messageToUserDelegate = MessageToUser; metadataUpdatedDelegate = MetadataUpdated; musicDeliveryDelegate = MusicDelivery; notifyMainThreadDelegate = NotifyMainThread; offlineStatusUpdatedDelegate = OfflineStatusUpdated; playTokenLostDelegate = PlayTokenLost; startPlaybackDelegate = StartPlayback; stopPlaybackDelegate = StopPlayback; streamingErrorDelegate = StreamingError; userinfoUpdatedDelegate = UserinfoUpdated; var callbacks = new libspotify.sp_session_callbacks { connection_error = connectionErrorDelegate.GetFunctionPtr(), end_of_track = endOfTrackDelegate.GetFunctionPtr(), get_audio_buffer_stats = getAudioBufferStatsDelegate.GetFunctionPtr(), log_message = logMessageDelegate.GetFunctionPtr(), logged_in = loggedInDelegate.GetFunctionPtr(), logged_out = loggedOutDelegate.GetFunctionPtr(), message_to_user = messageToUserDelegate.GetFunctionPtr(), metadata_updated = metadataUpdatedDelegate.GetFunctionPtr(), music_delivery = musicDeliveryDelegate.GetFunctionPtr(), notify_main_thread = notifyMainThreadDelegate.GetFunctionPtr(), offline_status_updated = offlineStatusUpdatedDelegate.GetFunctionPtr(), play_token_lost = playTokenLostDelegate.GetFunctionPtr(), start_playback = startPlaybackDelegate.GetFunctionPtr(), stop_playback = stopPlaybackDelegate.GetFunctionPtr(), streaming_error = streamingErrorDelegate.GetFunctionPtr(), userinfo_updated = userinfoUpdatedDelegate.GetFunctionPtr() }; var callbacksPtr = Marshal.AllocHGlobal(Marshal.SizeOf((object) callbacks)); Marshal.StructureToPtr(callbacks, callbacksPtr, true); return callbacksPtr; }