使用的 pythonnet 为尚在测试的 3.0 版本。该版本直接舍弃了一大堆依赖,安装非常简单。 这个pythonnet据说在windows和linux都可以正常使用,当前我只在windows上测试,linux上有空再试
# 当前最新(截止至2022/3/29)的预发行版本
pip install pythonnet==3.0.0a2
3.0.0 版本不再限定某个 python 3.X 版本,而是全部 python 3.X 版本都可以直接安装。 因为自3.0.0版本开始,pythonnet 把对 C# 的依赖全都变成了动态依赖于系统的 Net库,而不是再封装到wheel里面。
简单的基于pythonnet 导入第三方库的DLL和使用第三方库方法的示例。
import sys
import os
# 把第三方C#库的DLL所在的文件夹包含到 sys.path 路径列表里面
# 一定要把第三方DLL的所有第三方子依赖DLL的文件夹都弄进去,不然后面会导入失败
# 或者把这些DLL都丢在执行的py文件所在目录,那也没问题,这样可以省去该步。
sys.path.append(os.path.dirname(__file__)+'/dll')
import pythonnet
import clr
from System import String
from System.IO import SeekOrigin
from System.IO import MemoryStream
from System.Collections import *
# 导入第三方C#库
# 我的 DLL 的名称是 IC.SlideServices.FileFormat.Tronmedi.Common.dll
# 所以导入名称为 IC.SlideServices.FileFormat.Tronmedi.Common
# 不需要包含 .dll 后缀,也不需要包含它所在的文件夹
# 注意,如果目标DLL缺少没找到某些子依赖DLL,该步不会报错,但会在下一步导入时提示找不到对应的命名空间,这个十分坑爹,很难查错。
clr.AddReference("IC.SlideServices.FileFormat.Tronmedi.Common")
# 从第三方C#库中导入类 TronArchive
# 该步有时报错找不到某些子依赖DLL,这个还好,可以手动添加
# 有时报错指定的命名空间不存在,这个就很坑爹,很难查
from IC.SlideServices.FileFormat.Tronmedi import TronArchive
# 使用该类打开文件
arc = TronArchive(r'C012.tron')
# 随便打印一些信息
print(arc.Metadata.Name)
print(arc.Metadata.Version)
print(arc.Metadata.MaximumZoomLevel)
print(arc.Metadata.VerticalResolution)
print(arc.Metadata.HorizontalResolution)
|