protected static StringBuilder CallNative()

in src/cs/Microsoft.PhoneticMatching/NativeResourceWrapper.cs [83:116]


        protected static StringBuilder CallNative(Func<StringBuilder, NativeResult> nativeFunc)
        {
            ManagedCallback.LastError = null;
            StringBuilder buffer = new StringBuilder(NativeResourceWrapper.BufferSize);
            var result = nativeFunc(buffer);

            if (result == NativeResult.BufferTooSmall)
            {
                if (NativeResourceWrapper.BufferSize > MaximumBufferSize)
                {
                    throw new InsufficientMemoryException(string.Format("Native library requires a buffer of {0} characters. Maximum capacity is {1}.", NativeResourceWrapper.BufferSize, MaximumBufferSize));
                }

                buffer.Capacity = NativeResourceWrapper.BufferSize;
                result = nativeFunc(buffer);
            }

            if (ManagedCallback.LastError != null)
            {
                throw ManagedCallback.LastError;
            }

            if (result != NativeResult.Success)
            {
                if (result == NativeResult.InvalidParameter)
                {
                    throw new ArgumentException(buffer.ToString());
                }

                throw new Exception(string.Format("Unhandled exception in native code: {0}", buffer));
            }

            return buffer;
        }