WordPerfect COM 自动化错误
WordPerfect COM Automation Error
在 c# .Net 4.0 中,我试图自动化 WordPerfect。
为此,我在我的项目中添加了对位于 WordPerfect 程序文件夹中的 wpwin14.tlb
文件的引用。
这具有在我的项目中创建 COM 接口的效果。
接下来我应该能够编写实例化 WordPerfect.PerfectScript
对象的代码,我可以使用该对象来自动化 WordPerfect。
但是,当我尝试实例化 WordPerfect.PerfectScript 对象时,c# 抛出错误:
"Unable to cast COM object of type 'System.__ComObject' to interface
type 'WordPerfect.PerfectScript'. This operation failed because the
QueryInterface call on the COM component for the interface with IID
'{C0E20006-0004-1000-0001-C0E1C0E1C0E1}' failed due to the following
error: The RPC server is unavailable. (Exception from HRESULT:
0x800706BA)."
该消息中要归零的事情(我相信)是 RPC 服务器不可用。
我已经尝试过在后台使用 WordPerfect 运行 和不使用它。我已经去我的服务并确保 RPC 服务都是 运行 并重新启动一切。
我是否可能被防火墙阻止了?这是我唯一的猜测
确保您的 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;
}
}
}
安装服务包 "magically" 解决了这个问题。
顺便说一句,为了将来参考,您也可以尝试 WPUniverse forums。有相当多的WP高手定期解答疑难问题
还有一个 link X4 更新 here:
我只是将其包装为 OLE 调用并使用 FinalReleaseComObject 清理我的 COM 对象。
这是一个简单的包装器 class 我一直在使用它来打开 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);
}
}
}
在 c# .Net 4.0 中,我试图自动化 WordPerfect。
为此,我在我的项目中添加了对位于 WordPerfect 程序文件夹中的 wpwin14.tlb
文件的引用。
这具有在我的项目中创建 COM 接口的效果。
接下来我应该能够编写实例化 WordPerfect.PerfectScript
对象的代码,我可以使用该对象来自动化 WordPerfect。
但是,当我尝试实例化 WordPerfect.PerfectScript 对象时,c# 抛出错误:
"Unable to cast COM object of type 'System.__ComObject' to interface type 'WordPerfect.PerfectScript'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{C0E20006-0004-1000-0001-C0E1C0E1C0E1}' failed due to the following error: The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)."
该消息中要归零的事情(我相信)是 RPC 服务器不可用。
我已经尝试过在后台使用 WordPerfect 运行 和不使用它。我已经去我的服务并确保 RPC 服务都是 运行 并重新启动一切。
我是否可能被防火墙阻止了?这是我唯一的猜测
确保您的 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;
}
}
}
安装服务包 "magically" 解决了这个问题。
顺便说一句,为了将来参考,您也可以尝试 WPUniverse forums。有相当多的WP高手定期解答疑难问题
还有一个 link X4 更新 here:
我只是将其包装为 OLE 调用并使用 FinalReleaseComObject 清理我的 COM 对象。
这是一个简单的包装器 class 我一直在使用它来打开 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);
}
}
}