C# Как правильно использовать createtextservices и наследовать интерфейс itexthost?
Я хочу реализовать безоконное форматированное текстовое поле, но пример, который я нашел, - это только C++.
Теперь я выполнил большую часть кода с помощью C#. Единственная проблема заключается в том, что функция CreateTextServices есть ошибка (Win10x64-это нормально, Win7x86-ошибка):
protected override void OnHandleCreated(EventArgs e) { base.OnHandleCreated(e); try { IntPtr pUnk = IntPtr.Zero; if (WinAPI.CreateTextServices(IntPtr.Zero, this, out pUnk) < 0) throw new Win32Exception(); //Guid iid = typeof(WinInterface.ITextServices).GUID; //Marshal.QueryInterface(pUnk, ref iid, out ppv); //services = (WinInterface.ITextServices) // Marshal.GetTypedObjectForIUnknown(ppv, typeof(WinInterface.ITextServices)); } finally { //Marshal.Release(pUnk); } } [DllImport(ExternDll.Msftedit, SetLastError = true, CharSet = CharSet.Auto)] public static extern int CreateTextServices( IntPtr punkOuter, WinInterface.ITextHost pITextHost, out IntPtr ppUnk );
На win7x86 он всегда выбрасывает исключение FatalExecutionEngineError.
Кто-нибудь может мне помочь? Спасибо
Что я уже пробовал:
Я изменил значения параметров функции ITextHost, но они не имеют никакого эффекта.
Richard MacCutchan
Для какого целевого процессора это компилируется, x86 или x64?
Troy-Z
Любой процессор, который я скомпилировал на Win7, не может работать, но скомпилированный exe-файл можно разместить на Win10.
Richard MacCutchan
Должно быть, существует какая-то другая несовместимость между вашим приложением и Windows 7. Проверьте версии программы .Чистый фреймворк, библиотеки и т. д.
Troy-Z
Я брал интервью на двух компьютерах Win7. Похоже, что и другие сталкивались с этой проблемой, но я не видел, как он ее окончательно решил: https://www.codeproject.com/Messages/4517125/How-to-use-CreateTextServices - in-Csharp.aspx