我一直在尝试执行一项最初看来微不足道的任务:使用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
我收到一条消息说程序集是注册的(注册的地方是未知的)。
然后,我尝试使用以下代码连接到程序:
import clr
clr.AddReference ('WordPerfect')
import WordPerfect
WP = WordPerfect.PerfectScript
WP.AppMaximize () # AppMaximize is a PerfectScript call to open the programEclipse识别了对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代码。该守则实质上是这样的:
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“:
import clr
clr.AddReference ('Microsoft.Office.Interop.Excel')
from Microsoft.Office.Interop import Excel
ex = Excel.ApplicationClass()运行该代码可以打开Excel,没有任何抱怨。
快速查看使用dir()导入的WordPerfect类的结构就会发现一个ApplicationClass方法。
然后,我尝试了以下命令(使用IronPython解释器):
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中,我尝试了如下:
gacutil /i WordPerfect.dll让我犯了这个错误:
将程序集添加到缓存中的
失败:尝试安装没有强名称的程序集。
现在我被困住了。
我是否需要为这个第三方dll创建一个强命名的程序集?(我倾向于认为这是不必要的。)
关于类对象是如何调用的,我是不是遗漏了python方面的一些重要内容?
我是否错过了某种实例化/调用/咒语?
为什么VB Express在dll上没有问题,而我无法在Eclipse中有效地使用它?
我注定要在更多的微软产品上花大钱吗?
我为这篇文章的篇幅道歉。而且,是的,仍然有很好的理由使用WordPerfect!
发布于 2013-07-22 22:58:37
经过一年的不使用.NET,我再次尝试,并发现正确的类实例化是"PerfectScriptClass",而不是"PerfectScript",这是在VB.NET中使用的类。仍然困惑,但至少它能工作!还需要调用构造函数方法"()",内森指出了这一点。
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中的最新代码。
发布于 2012-02-05 07:37:05
也许您需要调用PerfectScript的构造函数
WP = WordPerfect.PerfectScript()
WP.AppMaximize () 而不是电流
WP = WordPerfect.PerfectScript
WP.AppMaximize () https://stackoverflow.com/questions/9147380
复制相似问题