private static void GetUILanguageCallbackInternal(ReturnCode ret, IntPtr blob, IntPtr callbackId)
        {
            UILanguage ul = new UILanguage();

            // read from blob when possible
            if (ret == ReturnCode.SUCCESS)
            {
                // copy blob into uli
                UILanguageInternal uli = new UILanguageInternal();
                uli = (UILanguageInternal)Marshal.PtrToStructure(blob, typeof(UILanguageInternal));

                // read ul from uli
                ul.cultureCode = uli.cultureCode;
            }

            // read from cid
            GetUILanguageCallbackId cid = new GetUILanguageCallbackId();

            cid = (GetUILanguageCallbackId)Marshal.PtrToStructure(callbackId, typeof(GetUILanguageCallbackId));
            GetUILanguageCallbackDelegate nextCall = cid.callback;
            int id = cid.id;

            // call user provided function
            nextCall(ret, ul.cultureCode, id);
        }
        public static void GetUILanguage(GetUILanguageCallbackDelegate callback)
        {
            if (!instanceCreated)
            {
                Debug.LogError("ERROR: Cannot get highlights UI language. The SDK has not been initialized.");
                return;
            }

            GetUILanguageCallbackId cid = new GetUILanguageCallbackId();

            cid.id                   = GetCallbackId();
            cid.callback             = callback;
            cid.intermediateCallback = GetUILanguageCallbackInternal;

            IntPtr asyncOp = Marshal.AllocHGlobal(Marshal.SizeOf(cid));

            try
            {
                Marshal.StructureToPtr(cid, asyncOp, false);
                Highlights_GetUILanguageAsync(asyncOp);
            }
            finally
            {
                Marshal.FreeHGlobal(asyncOp);
            }
        }