C#嵌入IronPython脚本示例(hello world)

news/2023/11/30 15:05:18

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

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

        新建一个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!"

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

 





http://www.niftyadmin.cn/n/3655787.html

相关文章

JavaScript如何判断一个变量是数组还是对象

target instanceof type 注意:不可以用typeof,因为除了原始类型和function以外,全都是object。(包括null) ; 不要用Object来测试,因为Array属于object的子类 var a {} var b []// 【注意】…

去北大聆听比尔盖茨精彩演讲,感受创新中国未来

去北大聆听比尔盖茨精彩演讲,感受创新中国未来今天有幸去北大参加创新中国未来盛会,近距离聆听比尔盖茨精彩演讲,实令人心情澎湃。9:00钟准时开场,5个屏幕同时播放故宫上空二龙戏珠的震撼场景,接着沈向洋简短的开幕致辞…

提高精简框架集程序的性能

以下编程做法可以节省内存和改善设备应用程序的性能。使用 Windows 窗体和图形节省内存 对提供 BeginUpdate 和 EndUpdate 方法的控件使用这两种方法,提供这两种方法的控件包括 ComboBox、ListBox、ListView、ToolStripComboBox 和 TreeView。 …

js == 和===的区别

: 运算符称作相等,用来检测两个操作数是否相等,这里的相等定义的非常宽松,可以允许进行类型转换 :用来检测两个操作数是否严格相等 对于string,number等基础类型,和是有区别的 不同类型间比较&#xff…

javascript 扩展运算符...

是什么 取出参数对象的所有可遍历属性,然后拷贝到当前对象之中。 数组→参数序列 调用apply很方便 function add(x, y) {return x y; }const numbers [4, 38];// 数组转成单独的参数 add(...numbers) // 42 复制数组 替代concat const a1 [1, 2]; // 写法一 c…

Windows Mobile 2005网络连接之真机和模拟器的异同

我的预装Windows Mobile 2005的PPC与PC机同步互联时,ActiveSync会自动在PC机建立本地连接,IP地址一般默认为169.254.2.2,此时PPC上也有像对应的IP地址169.254.2.1,用Ping命令即可ping通,如下图所示:可是与W…

FTP之‘基础连接已关闭:服务器提交了协议冲突’错误探析

这段时间由于工作的关系,一直研究FTP 服务器/客户端的相关程序,发现了不少问题,有些确实是微软的bug(或者说相关代码不够健壮) 。一、微软IE浏览器作为FTP客户端的bug上传含中文字符的多级目录的失败的bug,…

JavaScript 深克隆和浅克隆

概念 浅克隆: 直接将存储在栈中的值赋值给对应的变量;如果是基本类型则直接赋值给对应的值;如果是引用类型则赋值的是地址; 深克隆: 就是直接把值赋值给对应的变量,从而产生一个与数据源不同的新数据&am…

FTP数据上传及WinCE系统FTP根目录设定

嵌入式系统难免要和上位机PC进行数据交换,小数据用TCP/IP实现就可以了,大文件,动则几百兆的数据,用Tcp/Ip自己实现有点划不来,所以我一般采用了Ftp上传的功能,在嵌入式组态软件的下载功能中就实现了组态的F…

JavaScript 垃圾回收机制

JavaScript拥有自动的垃圾回收机制,当一个值,在内存中失去引用时,垃圾回收机制会根据特殊的算法找到它,并将其回收,释放内存。 一 、垃圾回收概念 在有些数据不被需要的时候,这些数据就是垃圾数据&#x…

.Net 平台SerialPort类内部实现探秘

这段时间用Moxa DA660(WinCE5.0平台)测试16口同时下发数据,发现由于该硬件设备的CPU主频仅有260M赫兹,大于10口同时下发数据就会造成发送延迟,导致下发失败。前次用.net的SerialPort类实现了一个PPC红外口读写数据的小…

javaScript 内存泄露

什么是内存泄露 只要程序提出要求 ,运行时就需要提供内存 如果是持续性的服务进程,如果不及时释放不需要的内存,就会影响系统新能,甚至直接会崩溃。 不及时释放的内存 就叫内存泄露 什么情况下会引起? 1、意外的…

CSDN技术大会场记

1、和太阳一起出发2、远观大运村外景3、北京丽亭华苑酒店(CSDN技术大会场地)4、热闹的CSDN技术大会会场真正的CSDN英雄们 -- 名人堂,MVP,MVB这里面最早见过面的是孟宪会,是在我初次当选MVP在微软第一次聚会时认识的&am…

CSDN技术大会

其实在上周就收到了csdn相关人员的参会确认电话,今天早上查收邮件没有收到相关信息,没想到来了一个电话,提醒别忘了周五参会,她说补发邮件已不大可能,可以带名片过去,那边有名单可确认。也好,只…

JavaScript 作用域链

作用域链是什么 函数在使用一个变量的时候,会查找这个变量,如果自己内部没有,就会向上找,这个查找的过程就叫 作用域链 普通函数的作用域链 1、创建一个函数fn()时,会创建一个包含全局变量的作用域链,保存…
最新文章