# DotNetPy **Repository Path**: Jianghy/DotNetPy ## Basic Information - **Project Name**: DotNetPy - **Description**: C#调用Python - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2018-07-25 - **Last Updated**: 2021-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DotNetPy ## 项目介绍 > 本项目旨在实现C#对Python的操作; ## 更新说明 #### 2018.08.01 v0.1 > 1.完成基本框架的搭建,包括设置模块,导入模块,导入函数,调用函数,运行py脚本; > 2.函数支持String、Int32、Double; > 3.函数返回结果支持String、Int32,Double; > 4.本机测试环境.Net 4.0、Python 3.6.3 #### 2018.08.02 v0.1.2 > **[优化]** > object PyCallFunc(String ^funcName, Array ^args,string resType)=>object PyCallFunc(String ^funcName, Array ^args) > **[优化]** > objest PyCallFuncFromModule(String ^moduleName, String ^funcName, Array ^args,string resType)=>objest PyCallFuncFromModule(String ^moduleName, String ^funcName, Array ^args) #### 2018.08.03 v0.1.3 > **[优化]** 优化Python和C++/cli之间类型转换 > **[新增]** 参数与返回值支持使用基础类型数组 支持多维数组 ## 开发规划 > 1.支持更多类型参数及返回值 > 2.优化处理C++与Python之间数据类型转换 > 3.解决Python不同版本问题 > 4.解决不同.Net framework问题 ## 使用说明 > **引用库** ```cs using DotNetPy; ``` > **初始化PyEngine** > 返回值为PyEngine状态 ```cs PyEngine pyEngine = new PyEngine(); bool pyEngine.PyInitialize(); ``` > **PyEngine状态** > 返回值为PyEngine状态 ```cs bool pyEngine.PyIsInitialized(); ``` > **释放PyEngine** ```cs void pyEngine.PyFinalize(); ``` > **设置模块目录** > path 可以是null或者模块所在目录的绝对路径 > 如果是通过pip安装或者在python默认路径中可以不使用该函数 ```cs void pyEngine.PySetModulePath(string path); ``` > **加载模块** > 同import moduleName > moduleName 模块名称 > 返回值为加载结果 ```cs bool pyEngine.PyImportModule(string moduleName); ``` > **加载函数** > 同from moduleName import funcName > moduleName 模块名称 > funcName 函数名称 > 返回值为加载结果 ```cs bool pyEngine.PyImportFunc(string moduleName, string funcName); ``` > **执行Python代码** > code Python代码 ```cs void pyEngine.PyExecuteString(string code); ``` > **从已加载模块中调用函数** > moduleName 模块名称 > funcName 函数名称 > args 参数 > resType 返回值类型 S/s string L/l long D/d double ```cs object pyEngine.PyCallFuncFromModule(string moduleName, string funcName, Array args, string resType); ``` ## 使用示例 ```cs using System; using DotNetPy; namespace CsConsole { class Program { static void Main(string[] args) { PyEngine pyEngine = new PyEngine(); if (pyEngine.PyInitialize()) // 初始化PyEngine { pyEngine.PySetModulePath(null); // null 默认当前路径否则填绝对路径 if (pyEngine.PyImportFunc("t123", "F")) { object[] argss = new object[] { "-4.2", "2" }; // 添加参数 object obj = pyEngine.PyCallFunc("F", argss); // 执行函数 Console.WriteLine(obj); } //if (pyEngine.PyImportModule("t123")) //{ // object[] argss = new object[] { "1", "@" }; // 添加参数 // object obj = pyEngine.PyCallFuncFromModule("t123", "F", argss); // 执行函数 // Console.WriteLine(obj); //} } pyEngine.PyFinalize(); Console.ReadLine(); } } } ```