Как правильно использовать CreateTextServices, ITextHost в C #? - PullRequest
1 голос
/ 29 марта 2019

Я хочу реализовать расширенное текстовое поле без окон, но я нашел только несколько примеров C ++, я хочу реализовать его в C #, но при вызове функции CreateTextServices всегда возникает ошибка (" FatalExecutionEngineError ")。

Скомпилируйте платформу для любого процессора, Win10 (x64) работает правильно, Win7 (x86) работает неправильно .После компиляции на Win7 Win10 также может работать правильно.

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
            );

Я использую VS2017 и VS2013, почему возникает эта ошибка, в настоящий момент я не могу найти никаких подсказок.

...