简体   繁体   中英

How to solve TF_E_NOLOCK:The cookie in ec is invalid

I'm developing a TSF Text Services. It depend on TSF-TypeLib. Here is a part of the code of my project:

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class EditSession:BaseObject, ITfEditSession
    {
        public uint EditCookie;
        public HRESULT DoEditSession(uint ec)
        {
            EditCookie = ec;
            return S_OK();
        }
    }

    public class KeyEventSink : BaseObject, ITfKeyEventSink
    {
        private uint _clientId;
        private ITfThreadMgr _threadMgr;

        public KeyEventSink(uint clientId,ITfThreadMgr threadMgr)
        {
            _clientId = clientId;
            _threadMgr = threadMgr;
        }
        
        [DllImport("user32.dll")]
        static extern uint MapVirtualKey(uint uCode, uint uMapType);
        public HRESULT OnTestKeyDown(ITfContext pic, UIntPtr wParam, IntPtr lParam, out bool pfEaten)
        {
            var res = _threadMgr.GetFocus(out var documentMgr);
            res = documentMgr.GetTop(out var context);
            char nonVirtualKey = (char)MapVirtualKey(wParam.ToUInt32(), 2);
            Debug.WriteLine(nonVirtualKey);
            if (nonVirtualKey == 'F')
            {
                var editSession = new EditSession();
                res = context.RequestEditSession(_clientId, editSession,TF_ES.TF_ES_READWRITE, out var phrSession);
                var phrSeesionHRESULT = new HRESULT { Code = phrSession };
                if (phrSeesionHRESULT)
                {

                    var e = editSession.EditCookie;
                    res = context.GetStart(e, out var range); //A error occured 
                    Debug.WriteLine(res);
                    Debug.WriteLine((ManagerReturnValues)res.Code);
                    var charArray = "་".ToCharArray();
                    res = range.SetText(e, 0, charArray, charArray.Length);
                    pfEaten = res;
                    return res;
                }

            }
            pfEaten = false;
            return S_OK();
        }
    // Other function
    }

The error occured in the line that "res = context.GetStart(e, out var range); ".

TF_E_NOLOCK:The cookie in ec is invalid.

How to solove this problem?

EditSession Cookie only available in the function DoEditSession. Out the scope of this function cookie is out of date.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM