在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服务都在运行并重新启动一切。
我有可能被防火墙挡住了吗?这是我唯一的猜测
发布于 2015-03-09 15:31:09
我只是将其包装为OLE调用,并使用FinalReleaseComObject清理COM对象。
下面是一个简单的包装类,我一直使用它来打开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);
}
}
}发布于 2015-03-07 02:26:19
确保您的WordPerfect版本安装了所有的service和热修复程序。多年来,这一步为我解决了许多听起来随意的问题。看起来您使用的是X4,Corel不再支持它,这意味着更新不再出现在它的网站上。您应该运行14.0.0.756版本(SP2 +2个修补程序)。
我只是卸载并重新安装WPX4,而没有更新service。运行这段代码会给出确切的错误,如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;
}
}
}安装service“神奇地”解决了问题。
顺便说一句,为了将来的参考,您也可以尝试WPUniverse 论坛。有相当多的WP专家,他们经常回答困难的问题。
还有到X4更新这里:的链接。
https://stackoverflow.com/questions/28887847
复制相似问题