Troy-Z Ответов: 0

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

0 Ответов