首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WordPerfect COM自动化错误

WordPerfect COM自动化错误
EN

Stack Overflow用户
提问于 2015-03-05 21:14:34
回答 2查看 303关注 0票数 0

在c# .Net 4.0中,我试图使WordPerfect自动化。

为此,我在我的项目中添加了一个对驻留在wpwin14.tlb程序文件夹中的WordPerfect文件的引用。

它的效果是在我的项目中创建COM接口。

接下来,我应该能够编写代码,实例化一个WordPerfect.PerfectScript对象,我可以使用它来自动化WordPerfect。

但是,当我尝试实例化WordPerfect.PerfectScript对象时,c#抛出错误:

“无法将'System.__ComObject‘类型的COM对象转换为接口类型'WordPerfect.PerfectScript’。此操作失败是因为QueryInterface调用与IID '{C0E20006-0004-1000-0001-C0E1C0E1C0E1}‘的接口的COM组件,因为以下错误导致失败: RPC服务器不可用。( HRESULT: 0x800706BA除外)。”

在这条消息中(我确实相信)要关注的是RPC服务器不可用。

我已经尝试过在后台运行WordPerfect,而不是在后台运行。我已经使用了我的服务,并确保RPC服务都在运行并重新启动一切。

我有可能被防火墙挡住了吗?这是我唯一的猜测

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-09 15:31:09

我只是将其包装为OLE调用,并使用FinalReleaseComObject清理COM对象。

下面是一个简单的包装类,我一直使用它来打开Wp文档并将它们转换为pdf。它很好地清理了我们的自动化过程:

代码语言:javascript
复制
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);
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-03-07 02:26:19

确保您的WordPerfect版本安装了所有的service和热修复程序。多年来,这一步为我解决了许多听起来随意的问题。看起来您使用的是X4,Corel不再支持它,这意味着更新不再出现在它的网站上。您应该运行14.0.0.756版本(SP2 +2个修补程序)。

我只是卸载并重新安装WPX4,而没有更新service。运行这段代码会给出确切的错误,如OP:

代码语言:javascript
复制
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;

    }
}
}

安装service“神奇地”解决了问题。

顺便说一句,为了将来的参考,您也可以尝试WPUniverse 论坛。有相当多的WP专家,他们经常回答困难的问题。

还有到X4更新这里:的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28887847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档