You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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#类库项目设置

  1. 右键C#类库项目 → 属性 → 应用程序 → 勾选「使程序集COM可见」
  2. 生成 → 勾选「注册COM互操作」
  3. 重新生成项目(会自动完成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:03:09