IronPython脚本调用C#dll示例

简介:

上两篇IronPython脚本的文章介绍了与C#紧密结合的示例,这里还将提供一个与C#结合更紧密的示例,直接调用C#编写的DLL。

      我们还是沿用了上篇文章的代码(其实这里可以直接使用IronPython调试器进行联调了,没有必要再嵌入到C#了)

    注意:scriptEngine.AddToPath(Application.StartupPath); 这句代码比较关键,设定dll文件所在的目录。

 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8. using IronPython.Hosting;  
  9.  
  10. namespace TestIronPython  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.         }  
  18.  
  19.         private void button1_Click(object sender, EventArgs e)  
  20.         {  
  21.             PythonEngine scriptEngine = new PythonEngine();  
  22.             scriptEngine.AddToPath(Application.StartupPath);   
  23.  
  24.             scriptEngine.Execute(textBox1.Text);            
  25.         }  
  26.     }  
  27. }  
  28.  

     开始编写可供IronPython脚本调用的DLL,我们编写了两个类,一个提供静态函数访问,另一个提供属性和普通函数访问,以区别在IronPython脚本不同调用的方式。代码如下:  

 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.  
  5. namespace IronPython_TestDll  
  6. {  
  7.     public  class TestDll  
  8.     {  
  9.         public static int Add(int x, int y)  
  10.         {  
  11.             return x + y;  
  12.         }  
  13.     }  
  14.  
  15.     public class TestDll1  
  16.     {  
  17.         private int aaa = 11;  
  18.         public int AAA  
  19.         {  
  20.             get { return aaa; }  
  21.             set { aaa = value; }  
  22.         }  
  23.         public void ShowAAA()  
  24.         {  
  25.             global::System.Windows.Forms.MessageBox.Show(aaa.ToString());  
  26.         }  
  27.  
  28.     }  
  29. }  
  30.  

       下面再让我们看看IronPython脚本中的代码吧:

 
  1. import clr  
  2. clr.AddReferenceByPartialName("System.Windows.Forms")  
  3. clr.AddReferenceByPartialName("System.Drawing")  
  4. from System.Windows.Forms import *  
  5. from System.Drawing import *  
  6.  
  7. clr.AddReferenceToFile("IronPython_TestDll.dll")  
  8. from IronPython_TestDll import *  
  9.  
  10. a=12  
  11. b=6  
  12. c=TestDll.Add(a,b)  
  13. MessageBox.Show(c.ToString())  
  14.  
  15. td=TestDll1()  
  16. td.AAA=100  
  17. td.ShowAAA()  
  18.  

    比较关键的是这两句:

    

 
  1. clr.AddReferenceToFile("TronPython_TestDll.dll")    -- 加载DLL文件  
  2.    from TronPython_TestDll import *                                  -- 导入命名空间   

        静态方法可以直接调用,普通方法需要先定义类,再访问(和访问IronPython
自己本身的类没有任何区别)。

       运行结果如下:

     

        现在你是否对IronPython充满期待和兴趣了吧,动起手来,感受它的强大!

 
















本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/324323,如需转载请自行联系原作者

相关文章
|
3月前
|
定位技术 C# 图形学
Unity和C#游戏编程入门:创建迷宫小球游戏示例
Unity和C#游戏编程入门:创建迷宫小球游戏示例
71 2
|
3月前
|
C#
C# 布尔值和条件语句:入门指南和实用示例
在编程中,通常需要一个只能有两个值之一的数据类型,比如: 是 / 否 开 / 关 真 / 假 为此,C# 有一个 bool 数据类型,可以取 true 或 false 的值。
69 3
|
3月前
|
存储 C#
C# 数据类型与类型转换:包含教程与示例
使用正确的数据类型对应于相应的变量是重要的;这样可以避免错误、节省时间和内存,还会使您的代码更易于维护和阅读。最常见的数据类型有:
28 0
|
6月前
|
数据采集 数据可视化 数据挖掘
C#和HttpClient结合示例:微博热点数据分析
微博是中国最大的社交媒体平台之一,它每天都会发布各种各样的热点话题,反映了网民的关注点和舆论趋势。本文将介绍如何使用C#语言和HttpClient类来实现一个简单的爬虫程序,从微博网站上抓取热点话题的数据,并进行一些基本的分析和可视化。
C#和HttpClient结合示例:微博热点数据分析
|
6月前
|
定位技术 API C#
C# 高德地图WebApi对接示例
1、登录或注册高德地图开放平台然后申请应用key(需要认证个人或企业开发者) 高德开放平台 | 高德地图API (amap.com) 2、创建新应用,为新应用添加key,完成第一项后即可看到key管理 3、具体的开发文档、接口入参出参以及结果示例等详见高德地图开放平台官网 地理/逆地理编码-API文档-开发指南-Web服务 API | 高德地图API (amap.com) 4、直接书写具体示例 开发语言:C# 开发工具:visual studio 2019 开发项目类型:控制台程序 //
60 1
C# 高德地图WebApi对接示例
|
7月前
|
开发框架 .NET Java
C#下反射动态加载dll后如何卸载?
C#下反射动态加载dll后如何卸载?
|
7月前
|
Oracle 架构师 关系型数据库
C#反射应用之实现动态可配置可扩展框架的简单示例
C#反射应用之实现动态可配置可扩展框架的简单示例
|
7月前
|
Oracle 关系型数据库 MySQL
超简单的C#可配置可扩展基础框架示例
超简单的C#可配置可扩展基础框架示例
C#简单接口和继承示例详解——快速入门
C#简单接口和继承示例详解——快速入门
|
9月前
|
程序员 C#
C#简单继承示例详解——快速入门
C#简单继承示例详解——快速入门