Андрей-Чжун 2024-01-31 11:19 采纳率: 50%
浏览 7

python调用C#的dll,如何传入ref参数

C#的dll有一个接口是

Test.Data.GetSize("PA", ref width, ref height);

python调用的时候该怎么传入

ref width,ref height

python代码如下

import clr

clr.AddReference(r"D:\11\Test.dll")
import Test
Test.Data.GetSize("PA",?,?)
  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-31 11:20
    关注

    引自免费微信小程序:皆我百晓生

    要在Python中调用C#的DLL并传入ref参数,你可以使用Python的ctypes库来实现。ctypes库提供了一种调用C函数的机制,可以用于调用C#的DLL。

    下面是一种可能的解决方案:

    import ctypes
    
    # 加载DLL
    test_dll = ctypes.WinDLL(r"D:\11\Test.dll")
    
    # 定义参数类型
    test_dll.GetSize.argtypes = [ctypes.c_char_p, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)]
    
    # 定义传入的参数
    width = ctypes.c_int()
    height = ctypes.c_int()
    
    # 调用函数
    test_dll.GetSize(b"PA", ctypes.byref(width), ctypes.byref(height))
    
    # 打印结果
    print("Width:", width.value)
    print("Height:", height.value)
    

    在上面的代码中,我们首先使用ctypes.WinDLL加载了C#的DLL。然后,我们使用argtypes属性明确指定了GetSize函数的参数类型。接下来,我们定义了width和height变量作为传入参数,并使用ctypes.byref将这些变量的地址传递给函数。最后,我们使用value属性获取C#函数返回的结果。

    需要注意的是,我们在调用C#函数时传递字符串参数时需要使用b"PA"来表示一个字节字符串。

    希望这个解决方案对你有帮助!如果你需要进一步的帮助,请随时提问。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月31日

悬赏问题

  • ¥15 学习完python基础了,想继续学习该学习什么呢?
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥15 看一下OPENMV原理图有没有错误
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常
  • ¥15 Java,消息推送配置
  • ¥15 Java计划序号重编制功能,此功能会对所有序号重新排序,排序后不改变前后置关系。