首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IronPython在网络中开放COM应用程序

使用IronPython在网络中开放COM应用程序
EN

Stack Overflow用户
提问于 2012-02-05 06:26:18
回答 2查看 1.7K关注 0票数 1

我一直在尝试执行一项最初看来微不足道的任务:使用python和.NET开发一个.NET程序。在经历了2周的近乎成功和悲惨的失败之后,我开始怀疑是否所有.NET路径都是为了引导程序员不可避免地购买一个真正版本的Visual .

以下是我的基本工具:.NET版本4.030.;IronPython 2.7.1;Eclipse和PyDev;WordPerfect x4 (我也尝试过使用x5,结果也一样)。

我使用.NET命令行中的tlbimp.exe程序将wpwin14.tlb转换为一个tlbimp.exe程序集:

tlbimp wpwin14.tlb /out: NETwpwin14.dll

该程序转换了.tlb文件,但出于某种原因将其重命名为"WordPerfect.dll“。

然后,我使用RegAsm命令注册了程序集,充当计算机管理员:

regasm WordPerfect.dll

我收到一条消息说程序集是注册的(注册的地方是未知的)。

然后,我尝试使用以下代码连接到程序:

代码语言:javascript
复制
import clr
clr.AddReference ('WordPerfect')
import WordPerfect
WP = WordPerfect.PerfectScript
WP.AppMaximize ()       # AppMaximize is a PerfectScript call to open the program

Eclipse识别了对WordPerfect和导入语句的clr引用,并在编辑器中提供了整个PerfectScript命令集(但是,只在将WordPerfect.dll副本放在IronPython2.7\Lib\site-packages文件夹中之后才可用)。

从Eclipse运行脚本会产生以下错误:

TypeError: AppMaximize()只接受一个参数(0给定)

请注意,AppMaximize()不需要任何参数才能正确运行。

尝试其他PerfectScript命令(如WPActivate()和RevealCodes(1) )会产生类似的错误,只不过RevealCodes(1)命令在下一次从GUI手动打开WordPerfect时设法打开了该特性。

在IronPython解释器中运行脚本时,我得到了相同的错误,并且具有导入类和检查类的相同能力。

基于以前在VisualBasic2010Express中使用VB.NET的成功经验,我以这种方式编写python代码。该守则实质上是这样的:

代码语言:javascript
复制
Imports WordPerfect
Module Module1
Dim wpwin As WordPerfect.PerfectScript = New WordPerfect.PerfectScript
wpwin.AppMaximize()
...

为了在very中创建对" WordPerfect“的引用,我只浏览了WordPerfect程序目录中相同的wpwin14.tlb文件,并将其放到COM框中。然后,VB将该文件转换为一个可用的dll (显然,使用的方法与我使用的方法不同)。

然后,我尝试了一种类似于IronPython教程页面建议的方法(http://www.ironpython.info/index.php/Interacting_with_Excel),即在对象中调用"ApplicationClass“:

代码语言:javascript
复制
import clr
clr.AddReference ('Microsoft.Office.Interop.Excel')
from Microsoft.Office.Interop import Excel 
ex = Excel.ApplicationClass()

运行该代码可以打开Excel,没有任何抱怨。

快速查看使用dir()导入的WordPerfect类的结构就会发现一个ApplicationClass方法。

然后,我尝试了以下命令(使用IronPython解释器):

代码语言:javascript
复制
import clr
clr.AddReference ('WordPerfect')
import WordPerfect as WP
WP.ApplicationClass()

我又犯了一个错误,这里有一个相关的部分:

EnvironmentError: System.Runtime.InteropServices.COMException (0x80040154):使用CLSID {40852D4E-0076-47CD-8C70-92E42B35E5EC}检索组件的COM类工厂,由于以下错误而失败: 80040154类未注册(HRESULT例外:>0x80040154 (REGDB_E_CLASSNOTREG))。

考虑到我可能需要将我的dll放入GAC中,我尝试了如下:

代码语言:javascript
复制
gacutil /i WordPerfect.dll

让我犯了这个错误:

将程序集添加到缓存中的

失败:尝试安装没有强名称的程序集。

现在我被困住了。

我是否需要为这个第三方dll创建一个强命名的程序集?(我倾向于认为这是不必要的。)

关于类对象是如何调用的,我是不是遗漏了python方面的一些重要内容?

我是否错过了某种实例化/调用/咒语?

为什么VB Express在dll上没有问题,而我无法在Eclipse中有效地使用它?

我注定要在更多的微软产品上花大钱吗?

我为这篇文章的篇幅道歉。而且,是的,仍然有很好的理由使用WordPerfect!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-22 22:58:37

经过一年的不使用.NET,我再次尝试,并发现正确的类实例化是"PerfectScriptClass",而不是"PerfectScript",这是在VB.NET中使用的类。仍然困惑,但至少它能工作!还需要调用构造函数方法"()",内森指出了这一点。

代码语言:javascript
复制
import clr
clr.AddReference ('WordPerfect')
import WordPerfect
WP = WordPerfect.PerfectScriptClass()
WP.AppMaximize ()       # AppMaximize is a PerfectScript call to open the program

其他PerfectScript命令似乎也能工作。我尝试了Visual 2012集成shell + PTVS + Iron Python中的最新代码。

票数 0
EN

Stack Overflow用户

发布于 2012-02-05 07:37:05

也许您需要调用PerfectScript的构造函数

代码语言:javascript
复制
WP = WordPerfect.PerfectScript()
WP.AppMaximize ()  

而不是电流

代码语言:javascript
复制
WP = WordPerfect.PerfectScript
WP.AppMaximize ()  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9147380

复制
相关文章

相似问题

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