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,如需转载请自行联系原作者

相关文章
|
13天前
|
开发框架 安全 .NET
掌握 LINQ:通过示例解释 C# 中强大的 LINQ的集运算
通过本文的示例,我们详细介绍了C#中LINQ的强大集合运算功能。LINQ提供了一种简洁、灵活和类型安全的方式来查询和操作数据集合,从而大大提高了代码的可读性和可维护性。希望本文能帮助读者更好地掌握和应用LINQ,提高开发效率。
38 13
|
13天前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
88 1
|
4月前
|
安全 Java C#
Unreal Engine C# 脚本编写浅谈
本文介绍了在 Unreal Engine 中使用 C# 编写脚本的方法,涵盖环境搭建、基础概念、常见问题及代码案例。从安装插件到处理输入事件和加载蓝图,详细讲解了如何在 Unreal Engine 中高效利用 C# 进行开发。
88 3
|
5月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
222 0
|
5月前
|
API C#
异步轮询 Web API 的实现与 C# 示例
异步轮询 Web API 的实现与 C# 示例
130 0
|
5月前
|
C#
Delphi可不可以制作出像c#那样的dll类库?
在Delphi中,创建DLL项目(如dll.dpr)并定义一个类TMyCls后,在另一个项目(如test.dpr)中可以引入此DLL并直接实例化和调用类的方法。然而,Delphi目前主要支持两种DLL形式:动态链接库(需显式声明exports,仅支持函数调用)和ActiveX DLL(需定义IDL接口)。这两种方式都较为繁琐。相比之下,C# 的DLL类库更为便捷,编写并编译后即可在其他项目中直接使用。
|
7月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
233 0
|
7月前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
79 0
|
7月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
149 0
|
7月前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
742 0