Использование проекта + Добавить ссылку, вкладка Обзор. Перейдите в папку c: \ program files \ common files \ microsoft shared \ ink и выберите InkObj.dll. Теперь вы можете создать экземпляр MSINKAUTLib.InkDispClass. Он реализует IInkDisp и имеет методы Save и Load.
Вам придется привести объект к micautLib.IInkDisp, интерфейсы приходят из разных библиотек типов. И, наконец, прежде чем использовать LoadInk (), вы должны вызвать метод Show () MathInputControl. Сообщения об ошибках ужасны, все E_UNEXPECTED. Код, который я получил на работу:
var ctl = new micautLib.MathInputControl();
var ink = new MSINKAUTLib.InkDisp();
ink.Load(System.IO.File.ReadAllBytes("c:\\temp\\test.isf"));
var iink = (micautLib.IInkDisp)ink;
ctl.Show();
ctl.LoadInk(iink);
Плюс обработчики событий для события вставки и закрытия. И клей, чтобы получить окно в нужном месте.
Также помните, что библиотека типов micautLib зависит от разрядности компьютера. Проблемой является метод SetOwnerWindow (), вы действительно хотите использовать его для предотвращения исчезновения диалога за другим окном. Его аргумент объявлен как LONG_PTR, 32-битный тип в 32-битной операционной системе, 64-битный в x64. Оконная ручка. При использовании Visual Studio вы всегда получите 32-разрядную версию этого метода, поскольку VS - 32-разрядная программа.
Если вы планируете поддерживать 64-битные операционные системы, вам придется создать отдельную версию вашей программы. Начиная с запуска 64-битной версии Tlbimp.exe (не Visual Studio) для создания оболочки взаимодействия. Так что аргумент будет 64-битным значением и совместим с окном Handle, передаваемым методу.
Ах, радости COM. Не случайно, что это не было упаковано Microsoft.Ink.dll:)