python调用c#注意事项_Python脚本调用C#代码数据交互示例(hello world)

原地址:

http://www.djangochina.cn/forum.php?mod=viewthread&tid=247

随着项目的逐渐收尾, 对IronPython脚本也越来越熟悉,这里为IronPython脚本感兴趣但不入门的朋友写几篇使用心得,这是第一个:最简单的hello world程序。

首先,我们必须有一个IronPython脚本引擎库(IronPython.dll),我用的版本是V1.0,你可以在网上直接下到相关源码,编译后即生成IronPython.dll。

1、简单版本Hello World

新建一个C#桌面程序,引用该库后,我们便开始编写第一个程序。

下面是C#中的代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using IronPython.Hosting;

namespace TestIronPython

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

PythonEngine scriptEngine = new PythonEngine();

scriptEngine.Execute(textBox1.Text);

}

}

}

复制代码

代码很简单,声明了一个scriptEngine 实例,直接用Execute执行代码即可。下面看看py的代码该怎么写:

import clr

clr.AddReferenceByPartialName("System.Windows.Forms")

clr.AddReferenceByPartialName("System.Drawing")

from System.Windows.Forms import *

from System.Drawing import *

MessageBox.Show("Hello World!")

复制代码

第一句代码很重要,导入.net clr,用clr的AddReferenceByPartialName方法加载我们熟悉的System.Windows.Forms和System.Drawing库,最后可以直接执行.net中的MessageBox方法。

运行后,直接单击button1,即可弹出一个对话框"Hello World!"

怎么样,是不是很简单?!

2、数据交互

单单执行脚本是没有什么意思的,最重要的是嵌入的脚本能和宿主语言进行交互,下面我就讲讲这方面的实现。

IronPython脚本最优秀的地方就是与C#(或者说.net框架集)几乎无缝集成,C#实现的类很容易就传入到脚本中去。(目前唯感遗憾的是,IronPython脚本还没有支持嵌入版,希望不远的的将来能实现嵌入式版本)。

这是宿主语言的代码:

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

PythonEngine scriptEngine = new PythonEngine();

TestData td = new TestData();

td.intNum = 10;

scriptEngine.DefaultModule.Globals["td"] = td;

scriptEngine.Execute(textBox1.Text);

//显示intNum是否被脚本识别并改变

MessageBox.Show(td.intNum.ToString());

}

}

//数据交互类

public class TestData

{

public int intNum = 0;

}

复制代码

上面最关键的代码就是:scriptEngine.DefaultModule.Globals["td"] = td;

scriptEngine.DefaultModule这是一个字典类,可以添加多个不同类型,供脚本使用。字典中的关键字与脚本中对象的名称保持一致(内容任意,可以和你传的对象名称不一样,关键看你的意愿了)即可。

脚本对类中的一个变量进行运算,然后把结果显示出来(如下图,对应脚本在文本框里)

YF2007060401.jpg

怎么样,这个也很简单吧?下一篇文章,我就讲讲 IronPython脚本如何调用C#实现的dll库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值