- 浏览: 1193334 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
放纵思想:
写的不怎么样。
通用性太差。
VC(实现自己的ADO类) -
iefreer:
转载应标注原文链接: http://blog.csdn.net ...
zend server ce 启动错误: internal error -
hcmfys:
从新,神马 ,南方基地,好熟悉的名字,加油,好姑娘!
从程序员变为项目经理的背后 -
thiink:
非常想知道如果是自己高一些小的东西,那么可能技术含量不是很高, ...
2011年项目回顾与总结分析 -
wskiwwwx:
你怎么盗用我的文章啊,两个转载都没标注????http://b ...
自己写的平面柱状图,有个小bug
请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。版权声明
Python 调用.net framework写的类库的方法
1. 安装python2.5和对应的pywin32
安装方法:略。
2. 下载ironPython源代码 是C#的。
我用的是IronPython1.1的版本,从codeplex网站下载IronPython_1_1.rar。解压缩。
3. 用vistual studio 建立一个.NET类库工程,工程名字为:IronPython。
把ironPython目录下的src子目录中的ironPython目录的ironMath目录里的c#源文件(不要assemblyInfo.cs)都考到你的工程目录里。
在工程里增加刚考来的源文件。
4. 修改AssemblyInfo.cs
[assembly: ComVisible(false)]
将false 改为true
5. 在项目=>属性=>生成里把 为COM Interop注册 打上勾
6. 在项目=>属性=>签名 里把为程序集签名 打上勾,选择强名称密钥文件时 选择新建,输个文件名,比如 IronPython.snk, 也可以手动生成密钥文件,然后在这里选择.
手动生成的方法:在.Net Framework的命令行界面里用 sn -k IronPython.snk 这个命令.
7. 编译项目生成 IronPython.dll
8. 在.Net Framework的命令行界面里用 regasm IronPython.dll 注册COM组件
9. 在.Net Framework的命令行界面里用 gacutil -i IronPython.dll 把库加到全局缓存里
10. 建立.net framework 的类库。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{
public class testclass
{
public string func()
{
return "hello world";
}
}
}
11. 建立test.py调用刚才写的test.dll类库。代码:
import win32com
import win32com.client
eng=win32com.client.Dispatch("IronPython.Hosting.PythonEngine")
eng.execute("import clr")
eng.execute("import sys")
eng.execute("""sys.path.append('c:\\\\test')""")
eng.execute("print sys.path")
eng.execute("""clr.AddReferenceToFile("abc.dll")""")
eng.execute("from test import *")
eng.execute("obj = testclass()")
eng.execute("print obj.func()")
注意:eng.execute("""sys.path.append('c:\\\\test')""")
这句是将test.dll所在的路径添加到ironPython的sys.path中去。如果不加,AddReferenceToFile将会出错。
<!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} > <! [endif] > </div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">Python </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">调用</span><span lang="EN-US">.net framework</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">写的类库的方法</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">1. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">安装</span><span lang="EN-US">python2.5</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">和对应的</span><span lang="EN-US">pywin32</span></div> <div class="MsoNormal" style="text-indent: 20.25pt;" mce_style="text-indent: 20.25pt;" mce_tmp="1"><span style="font-family: 宋体;" mce_style="font-family: 宋体;">安装方法:略。</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">2. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">下载</span><span lang="EN-US">ironPython</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">源代码</span> <span style="font-family: 宋体;" mce_style="font-family: 宋体;">是</span><span lang="EN-US">C#</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">的。</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-family: 宋体;" mce_style="font-family: 宋体;">我用的是</span><span lang="EN-US">IronPython1.1</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">的版本,从</span><span lang="EN-US">codeplex</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">网站下载</span><a href="http://ironpython.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=2573#DownloadId=10616" mce_href="http://ironpython.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=2573#DownloadId=10616" target="_blank"><span lang="EN-US">IronPython_1_1.rar</span></a><span style="font-family: 宋体;" mce_style="font-family: 宋体;">。解压缩。</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">3. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">用</span><span lang="EN-US">vistual studio </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">建立一个</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">类库工程,工程名字为:</span><span lang="EN-US">IronPython</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">。把</span><span lang="EN-US">ironPython</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">目录下的</span><span lang="EN-US">src</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">子目录中的</span><span lang="EN-US">ironPython</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">目录的</span><span lang="EN-US">ironMath</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">目录里的</span><span lang="EN-US">c#</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">源文件</span><span lang="EN-US">(</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">不要</span><span lang="EN-US">assemblyInfo.cs)</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">都考到你的工程目录里。在工程里增加刚考来的源文件。</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">4. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">修改</span><span lang="EN-US">AssemblyInfo.cs</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US">[<span style="color: blue;" mce_style="color: blue;">assembly</span>: <span style="color: #2b91af;" mce_style="color: #2b91af;">ComVisible</span>(<span style="color: blue;" mce_style="color: blue;">false</span>)]</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-family: 宋体;" mce_style="font-family: 宋体;">将</span><span lang="EN-US">false </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">改为</span><span lang="EN-US">true</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">5. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">在项目</span><span lang="EN-US">=></span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">属性</span><span lang="EN-US">=></span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">生成里把</span> <span style="font-family: 宋体;" mce_style="font-family: 宋体;">为</span><span lang="EN-US">COM Interop</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">注册</span> <span style="font-family: 宋体;" mce_style="font-family: 宋体;">打上勾</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">6. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">在项目</span><span lang="EN-US">=></span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">属性</span><span lang="EN-US">=></span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">签名</span> <span style="font-family: 宋体;" mce_style="font-family: 宋体;">里把为程序集签名</span> <span style="font-family: 宋体;" mce_style="font-family: 宋体;">打上勾</span><span lang="EN-US">,</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">选择强名称密钥文件时</span> <span style="font-family: 宋体;" mce_style="font-family: 宋体;">选择新建</span><span lang="EN-US">,</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">输个文件名</span><span lang="EN-US">,</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">比如</span><span lang="EN-US"> IronPython.snk, </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">也可以手动生成密钥文件</span><span lang="EN-US">,</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">然后在这里选择</span><span lang="EN-US">.</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-family: 宋体;" mce_style="font-family: 宋体;">手动生成的方法</span><span lang="EN-US">:</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">在</span><span lang="EN-US">.Net Framework</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">的命令行界面里用</span><span lang="EN-US"> sn -k IronPython.snk </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">这个命令</span><span lang="EN-US">.</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">7. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">编译项目生成</span><span lang="EN-US"> IronPython.dll</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">8. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">在</span><span lang="EN-US">.Net Framework</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">的命令行界面里用</span><span lang="EN-US"> regasm IronPython.dll </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">注册</span><span lang="EN-US">COM</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">组件</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">9. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">在</span><span lang="EN-US">.Net Framework</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">的命令行界面里用</span><span lang="EN-US"> gacutil -i IronPython.dll </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">把库加到全局缓存里</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">10. </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">建立</span><span lang="EN-US">.net framework </span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">的类库。代码如下:</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体; color: blue;" mce_style="font-size: 10pt; font-family: 新宋体; color: blue;" lang="EN-US">using</span><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"> System;</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体; color: blue;" mce_style="font-size: 10pt; font-family: 新宋体; color: blue;" lang="EN-US">using</span><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"> System.Collections.Generic;</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体; color: blue;" mce_style="font-size: 10pt; font-family: 新宋体; color: blue;" lang="EN-US">using</span><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"> System.Linq;</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体; color: blue;" mce_style="font-size: 10pt; font-family: 新宋体; color: blue;" lang="EN-US">using</span><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"> System.Text;</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"> </span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体; color: blue;" mce_style="font-size: 10pt; font-family: 新宋体; color: blue;" lang="EN-US">namespace</span><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"> test</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US">{</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"><span> </span><span style="color: blue;" mce_style="color: blue;">public</span> <span style="color: blue;" mce_style="color: blue;">class</span> <span style="color: #2b91af;" mce_style="color: #2b91af;">testclass</span></span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"><span> </span>{</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"><span> </span><span style="color: blue;" mce_style="color: blue;">public</span> <span style="color: blue;" mce_style="color: blue;">string</span> func()</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"><span> </span>{</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"><span> </span><span style="color: blue;" mce_style="color: blue;">return</span> <span style="color: #a31515;" mce_style="color: #a31515;">"hello world"</span>;</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"><span> </span>}</span></div> <div class="MsoNormal" style="text-align: left;" mce_style="text-align: left;" align="left" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US"><span> </span>}</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US">}</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;" lang="EN-US">11. </span><span style="font-size: 10pt; font-family: 新宋体;" mce_style="font-size: 10pt; font-family: 新宋体;">建立<span lang="EN-US">test.py</span>调用刚才写的<span lang="EN-US">test.dll</span>类库。代码:</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">import win32com</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">import win32com.client</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng=win32com.client.Dispatch("IronPython.Hosting.PythonEngine")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US"> </span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("import clr")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("import sys")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("""sys.path.append('c:\\\\test')""")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("print sys.path")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("""clr.AddReferenceToFile("abc.dll")""")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("from test import *")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("obj = testclass()")</span></div> <div class="MsoNormal" mce_tmp="1"><span lang="EN-US">eng.execute("print obj.func()")</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-family: 宋体;" mce_style="font-family: 宋体;">注意:</span><span lang="EN-US">eng.execute("""sys.path.append('c:\\\\test')""")</span></div> <div class="MsoNormal" mce_tmp="1"><span style="font-family: 宋体;" mce_style="font-family: 宋体;">这句是将</span><span lang="EN-US">test.dll</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">所在的路径添加到</span><span lang="EN-US">ironPython</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">的</span><span lang="EN-US">sys.path</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">中去。如果不加,</span><span lang="EN-US">AddReferenceToFile</span><span style="font-family: 宋体;" mce_style="font-family: 宋体;">将会出错。在运行ipy的时候ipy所在的路径会直接添加到sys.path中去。编译成dll之后就不会自动添加进去了,所以要自己手动把test.dll的路径添加到sys.path中去。</span></div> <div mce_tmp="1"> < ></div> < >< >< ></d-->
相关推荐
主要介绍了Python调用.NET库的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
【ASP.NET编程知识】ASP.NET在底层类库中获取Session C#类中获取Session .docx
主要介绍了Python调用.net动态库实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
microsoft .net framework 4.7.2 developer pack
IronPython 3 IronPython3尚未准备就绪。 要支持Python 3.x,仍有许多工作要做。...IronPython可以使用.NET Framework和Python库,而其他.NET语言也可以轻松使用Python代码。 什么? 在哪里? Windows / Linu
pythonnet-用于.NET的Python Python for .NET是一个软件包,可为Python程序员提供与.NET公共语言运行时(CLR)几乎无缝的...从Python调用.NET代码Python.NET允许CLR名称空间从本质上被视为Python包。 从系统导入clr从
.NET Framework 版本检测代码。@Canada。
在.Net 写的项目要调用Python的一些方法完成特殊的操作,那么这就涉及到了,在.Net Framework中如何调用Python的脚本方法,通过IronPython完成了VB调用Python脚本方法
基于Python+.NET的OPC分布式数据采集及Web发布应用研究.pdf
python 基础类库
基于以太网,使用上位机PC与下位机PLC(倍福)通讯的Python类库,下载完成之后直接放在Python安装目录的Python\Python38-32\Lib\site-packages文件夹下,import即可使用,采用ADS协议,内部使用标签进行通讯。
Atom-ironpython-stubs.zip,通用ironpython/.net库的自动完成存根铁蟒树桩,atom是一个用web技术构建的开源文本编辑器。
python 调用java代码方法
IronPython是Python编程语言的一个实现,紧密写.NET Framework集成。IronPython可以使用.NET框架和Python 库,并且其它.NET语言可以很容易使用Python代码。IronPython 3 IronPython3 还没有准备好使用。 要支持 ...
IronPython可以使用.NET Framework和Python库,而其他.NET语言也可以轻松使用Python代码。 IronPython可以从获得。 什么? 在哪里? Windows / Linux / macOS构建 资料下载 帮助 “ Hello World”的Iron...
Python 与 PHP 互调用库,可以在 PHP 中使用 Python 语言的函数和类库,或者在 Python 中使用 PHP 的包。 但不是语言内嵌。编码依然使用各自的原生语法。目前仅支持 Linux 平台(理论上可以支持所有操作系统,待实现...
Chronyk:Python 3 的类库,用于解析手写格式的时间和日期
ironPython是一种在.NET及Mono上的Python实现,由微软的Jim Hugunin所发起,是一个开源的项目,基于微软的DLR引擎,除去.NET,IronPython与Python并没有什么区别。它支持一个可交互的控制台,该控制台支持完全的动态...
Python for .NET 是一个包,它使 Python 程序员几乎可以与 .NET 公共语言运行时 (CLR) 无缝集成,并为 .NET 开发人员提供强大的应用程序脚本工具。