1. 程式人生 > >python與C#的互相呼叫

python與C#的互相呼叫


python與C#的互相呼叫

一、C#呼叫python

新建一個專案,新增引用:IronPython.dll,Microsoft.Scripting.dll(在IronPython的安裝目錄中)。

建立一個文字檔案命名為hello.py,把該檔案新增的當前的專案中,並設定為總是輸出。

#hello.py
def welcome(name):
    return "hello" + name

呼叫hello.py檔案中的方法:
static void main(string[] args)
{
    ScriptRuntime pyRunTime=Python.CreateRuntime();
    dynamic obj=pyRunTime.UseFile("hello.py"
); Console.Write(obj.welcome("Nick")); Console.ReadKey(); } 二、Python呼叫C# 示例一:呼叫dll中的方法 1.先準備一個C#寫的dll,名稱為IronPython_TestDll.dll using System; using System.Collections.Generic; using System.Text; namespace IronPython_TestDll { public class TestDll { public static int Add(int
x, int y) { return x + y; } } public class TestDll1 { private int aaa = 11; public int AAA { get { return aaa; } set { aaa = value; } } public void ShowAAA() { global::System.Windows.Forms.MessageBox.Show(aaa.ToString()); } } } 2.
呼叫C#的dll中的方法 import clr clr.AddReferenceByPartialName("System.Windows.Forms") clr.AddReferenceByPartialName("System.Drawing") from System.Windows.Forms import * from System.Drawing import * clr.AddReferenceToFile("IronPython_TestDll.dll") from IronPython_TestDll import * a=12 b=6 #靜態方法可以直接呼叫 c=TestDll.Add(a,b) MessageBox.Show(c.ToString()) #普通方法需要先定義類 td=TestDll1() td.AAA=100 td.ShowAAA() 示例二:動態執行python程式碼 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(); //設定dll檔案所在的目錄 scriptEngine.AddToPath(Application.StartupPath); //textBox1.Text中寫的是python程式碼,但呼叫的是dll中的方法 scriptEngine.Execute(textBox1.Text); } } } //textBox1.Text中寫的是如下程式碼,會計算彈出100的提示框。 a=12 b=6 c=TestDll.Add(a,b) MessageBox.Show(c.ToString()) td=TestDll1() td.AAA=100 td.ShowAAA()