gpt4 book ai didi

c# - 如何将 python 数据结构返回给 C#

转载 作者:太空宇宙 更新时间:2023-11-03 14:42:20 24 4
gpt4 key购买 nike

Python3.6

如何将指定的数据结构从 C# 库返回给 python 程序?

我有一些用 C# 编写的程序的核心,想使用 Python 访问这些代码,以扩展代码的运行能力。此时我只是想确认我可以从 python 程序中访问 C# 代码以验证该过程。

我在 C# 中有这个函数,可以从 python 调用。

文件;

IOLibrary.cs

[DllExport("readData", CallingConvention = CallingConvention.Cdecl)]
public static List<TrainRecord> readData(string filename, List<string> trainList, bool excludeListOfTrains, DateTime[] dateRange)

和文件;

TrainLibrary.cs 包含数据结构

namespace TrainLibrary
{
public class TrainRecord
{
public string trainID;
public string locoID;
public DateTime dateTime;
public GeoLocation location;
public trainOperator trainOperator;
public trainCommodity commodity;
public double kmPost;
public double speed;
public double powerToWeight;
...

trainOperator 和 trainCommodity 是枚举类型,其余不言自明。

访问该函数的python代码是:

import sys
from datetime import datetime
import clr
clr.AddReference( r"<full path>\IOLibrary.dll")
clr.AddReference( r"<full path>\TrainLibrary.dll")

from IOLibrary import FileOperations
#from TrainLibrary import TrainRecord, trainCommodity, trainOperator, GeoLocation

file = 'file_to_read.txt'
excludeTrainList = ["item1","item2","item3"]
dateRange = [datetime(2018, 1, 1), datetime(2018, 2, 1)]

a = FileOperations()

fileOpInstance = FileOperations()
# records needs to be a List<Trainrecords> ?
records = fileOpInstance.readData(file, excludeTrainList, False, dateRange)
print (len(records))

此代码对于返回“Hello World”的简单示例运行良好,但是当我运行代码以访问我需要的函数时,出现错误:

No method matches given arguments for readData

现在,我确定这与我传递日期范围的方式或返回结果的方式有关。

我尝试包括注释掉的行

from TrainLibrary import TrainRecord, trainCommodity, trainOperator, GeoLocation

在 python 程序中,但出现此错误:

No module named 'TrainLibrary'

如何让 Python 理解 C# 数据结构?

最佳答案

我发现我必须在 TrainLibrary.cs 文件中包含 DLLExport using 指令才能访问数据结构。

火车图书馆.cs

using RGiesecke.DllExport;
using System.Runtime.InteropServices;
...

然后按名称导入数据结构

Python程序

clr.AddReference( r"<full path>\TrainLibrary.dll")
from TrainLibrary import TrainRecord, trainCommodity, trainOperator, GeoLocation
...

关于c# - 如何将 python 数据结构返回给 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56213153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com