В С # .Net 4.0 я пытаюсь автоматизировать WordPerfect.
Для этого я добавляю в свой проект ссылку на файл wpwin14.tlb
, который находится в папке программы WordPerfect.
Это привело к созданию COM-интерфейсов в моем проекте.
Затем я смогу написать код, создающий экземпляр объекта WordPerfect.PerfectScript
, который я могу использовать для автоматизации WordPerfect.
Однако, когда я пытаюсь создать экземпляр объекта WordPerfect.PerfectScript, C # выдает ошибку:
«Невозможно преобразовать COM-объект типа 'System .__ ComObject' к типу интерфейса 'WordPerfect.PerfectScript'. Эта операция завершилась неудачно из-за вызова QueryInterface компонента COM для интерфейса с IID '{C0E20006-0004-1000-0001-C0E1C0E1C0E1} 'не удалось из-за следующей ошибки: сервер RPC недоступен (исключение из HRESULT: 0x800706BA). "
Главное в этом сообщении (я верю) заключается в том, что сервер RPC недоступен.
Я пробовал это с WordPerfect, работающим в фоновом режиме и без него. И я пошел к своим службам и убедился, что все службы RPC работают, и все перезапустил.
Возможно ли, что меня заблокирует брандмауэр? Это моя единственная слабая догадка
2 ответа
Я просто оборачиваю его как вызов OLE и очищаю свой COM-объект с помощью FinalReleaseComObject.
Вот простой класс-оболочка, который я использовал для открытия документов Wp и преобразования их в pdf. В нашем автоматизированном процессе он прекрасно очищается:
public class WpInterop : IDisposable
{
private bool _disposed;
private PerfectScript _perfectScript;
public PerfectScript PerfectScript
{
get
{
if (_perfectScript == null)
{
Type psType = Type.GetTypeFromProgID("WordPerfect.PerfectScript");
_perfectScript = Activator.CreateInstance(psType) as PerfectScript;
}
return _perfectScript;
}
}
protected void Dispose(bool disposing)
{
if (disposing)
{
Marshal.FinalReleaseComObject(_perfectScript);
}
_disposed = true;
}
public void Dispose()
{
if (_disposed == false)
{
GC.SuppressFinalize(this);
Dispose(true);
}
}
}
Убедитесь, что в вашей версии WordPerfect установлены все пакеты обновления и исправления. Этот шаг устранил для меня много проблем со случайным звуком за эти годы. Похоже, вы используете X4, который больше не поддерживается Corel, а это означает, что обновлений больше нет на его веб-сайте. У вас должна быть версия 14.0.0.756 (SP2 плюс 2 исправления).
Я просто удалил WPX4 и переустановил его без обновлений пакета обновления. Запуск этого кода дал точную ошибку как OP:
using System.Runtime.InteropServices;
using WordPerfect;
namespace WP14TLB
{
class Program
{
static void Main(string[] args)
{
PerfectScript ps = new PerfectScript();
ps.WPActivate();
ps.KeyType("Hello WP World!");
Marshal.ReleaseComObject(ps);
ps = null;
}
}
}
Установка пакетов обновлений «волшебным образом» устранила проблему.
Кстати, для справки в будущем вы также можете попробовать форумы WPUniverse. Есть немало экспертов по WP, которые регулярно отвечают на сложные вопросы.
Здесь также есть ссылка на обновления X4 здесь:
Похожие вопросы
Новые вопросы
c#-4.0
В C # 4.0 были добавлены такие функции, как динамические объекты, улучшения взаимодействия COM, общая ко-и противоположная дисперсия, необязательные и именованные параметры. Используйте этот тег, если ваш вопрос относится к конкретным функциям C # 4.0. Тег C # следует использовать, если ваш вопрос не относится к функциям C # 4.0.