如何用Python调用C#类库的SAPDate函数?ctypes调用报错解决
解决Python调用C#类库静态方法的问题
你遇到的问题根源在于:C#编译生成的是.NET托管程序集(.dll),而ctypes只能加载原生Win32/C++ DLL,所以直接用ctypes找不到托管代码里的SAPDate函数。下面提供两种可行的解决方案:
方案一:使用pythonnet(推荐)
pythonnet是专门用于Python与.NET交互的库,能直接加载并调用.NET程序集。
步骤1:安装pythonnet
打开命令行执行:
pip install pythonnet
步骤2:编写调用代码
import clr # 加载你的C#类库 clr.AddReference(r"C:\Users\Saeil LIlla\source\repos\DateOperations\DateOperations\bin\Debug\DateOperations.dll") # 导入命名空间下的类 from DateOperations import Class1 # 调用静态方法SAPDate result = Class1.SAPDate("4-Jul-22") print(f"Date Value: {result}")
方案二:将C#类库暴露为COM组件
如果无法使用pythonnet,可以把C#类库注册为COM组件,通过Python的win32com调用。
步骤1:修改C#类库项目设置
- 右键C#类库项目 → 属性 → 应用程序 → 勾选「使程序集COM可见」
- 生成 → 勾选「注册COM互操作」
- 重新生成项目(会自动完成COM组件注册)
步骤2:编写Python调用代码
import win32com.client # 实例化COM对象(ProgID格式:命名空间.类名) obj = win32com.client.Dispatch("DateOperations.Class1") # 调用静态方法 result = obj.SAPDate("4-Jul-22") print(f"Date Value: {result}")
补充说明
- 若需手动注册COM组件,可执行命令(需管理员权限):
regasm /codebase DateOperations.dll - 确保Python与C# DLL的位数一致(64位Python对应64位编译的DLL,32位同理),避免位数不匹配报错
内容的提问来源于stack exchange,提问作者Persius_jackson
相关产品推荐
相关产品推荐

