internal static extern void GADUSetBannerCallbacks(
         IntPtr bannerView,
         BannerClient.GADUAdViewDidReceiveAdCallback adReceivedCallback,
         BannerClient.GADUAdViewDidFailToReceiveAdWithErrorCallback adFailedCallback,
         BannerClient.GADUAdViewWillPresentScreenCallback willPresentCallback,
         BannerClient.GADUAdViewDidDismissScreenCallback didDismissCallback,
         BannerClient.GADUAdViewWillLeaveApplicationCallback willLeaveCallback);
        private static void AdViewWillLeaveApplicationCallback(IntPtr bannerClient)
        {
            BannerClient client = IntPtrToBannerClient(bannerClient);

            if (client.OnAdLeavingApplication != null)
            {
                client.OnAdLeavingApplication(client, EventArgs.Empty);
            }
        }
        private static void AdViewDidDismissScreenCallback(IntPtr bannerClient)
        {
            BannerClient client = IntPtrToBannerClient(bannerClient);

            if (client.OnAdClosed != null)
            {
                client.OnAdClosed(client, EventArgs.Empty);
            }
        }
        private static void AdViewWillPresentScreenCallback(IntPtr bannerClient)
        {
            BannerClient client = IntPtrToBannerClient(bannerClient);

            if (client.OnAdOpening != null)
            {
                client.OnAdOpening(client, EventArgs.Empty);
            }
        }
        private static void AdViewDidReceiveAdCallback(IntPtr bannerClient)
        {
            BannerClient client = IntPtrToBannerClient(bannerClient);

            if (client.OnAdLoaded != null)
            {
                client.OnAdLoaded(client, EventArgs.Empty);
            }
        }
        private static void AdViewDidFailToReceiveAdWithErrorCallback(
            IntPtr bannerClient, string error)
        {
            BannerClient            client = IntPtrToBannerClient(bannerClient);
            AdFailedToLoadEventArgs args   = new AdFailedToLoadEventArgs()
            {
                Message = error
            };

            client.OnAdFailedToLoad(client, args);
        }
        private static void AdViewDidFailToReceiveAdWithErrorCallback(
            IntPtr bannerClient, IntPtr error)
        {
            BannerClient client = IntPtrToBannerClient(bannerClient);

            if (client.OnAdFailedToLoad != null)
            {
                LoadAdErrorClientEventArgs args = new LoadAdErrorClientEventArgs()
                {
                    LoadAdErrorClient = new LoadAdErrorClient(error)
                };
                client.OnAdFailedToLoad(client, args);
            }
        }
        private static void AdViewPaidEventCallback(
            IntPtr bannerClient, int precision, long value, string currencyCode)
        {
            BannerClient client = IntPtrToBannerClient(bannerClient);

            if (client.OnPaidEvent != null)
            {
                AdValue adValue = new AdValue()
                {
                    Precision    = (AdValue.PrecisionType)precision,
                    Value        = value,
                    CurrencyCode = currencyCode
                };
                AdValueEventArgs args = new AdValueEventArgs()
                {
                    AdValue = adValue
                };

                client.OnPaidEvent(client, args);
            }
        }