Pythonnet将参数传递给C#dll

我正在使用Pythonnet 2.4.0访问C#dll。我有一台装有Python 3.7.6的Windows 10计算机。

我正在尝试使用仅将路径字符串作为参数的方法,但我无法使其正常工作。

import clr
sys.path.append(os.getcwd)
clr.AddReference('C#Wrapper')

path = "C:\\Users\\username\\Folder"

c#class.method(string path)

如果我使用pythonnet中的重载属性,它会告诉我该参数应为System.String类型,但是执行以下操作也无济于事:

path = System.String("C:\\Users\\username\\Folder")

我一直收到TypeError:没有方法匹配给定的参数。 我是否需要对字符串进行编码或创建一个char数组,以便c#能够理解它?

编辑:

我刚刚在dll中找到一个仅包含Int32参数的测试函数,并且我遇到了同样的问题!我尝试过类似的事情:

import ctypes
c#class.testmethod(ctypes.c_int32(1))

from System import Int32
c#class.testmethod(Int32(1))

但没有任何效果。如何将参数传递给C#dll?

[已解决]:

我自己弄清楚了。在第二种情况下,我只是忘了实例化一个类对象。我应该做的:

classobj = c#class()
classobj.testmethod(1)

这使我意识到,在第一种情况下,我基本上遇到了相同的问题。我遵循了Visual Basic手册来编写我的Python程序,它的内容如下:

classobj = c#class

但是在Python中,您需要编写:

classobj = c#class()

因此缺少括号会导致 TypeError:No Method与给定参数匹配,这非常容易引起误解。由于phythonnet的出色开发,完美地处理了类型转换和参数传递!万一其他人遇到同样的问题,我不会删除这个问题。

jiabing305 回答:Pythonnet将参数传递给C#dll

以上答案是正确的:Pythonnet passing arguments to c# dll。 我想澄清一下这意味着什么。

发生错误是因为在没有实例化对象的情况下访问了类中的方法

解决方案是两者之一:

  • 创建类的实例
  • 将 .net 方法标记为静态

问题是错误消息具有误导性,它说“没有方法匹配给定的参数”。这让我试图找到正确的论点。

对我来说,这发生在我忘记将静态修饰符添加到我调用的 .net 方法时。

本文链接:https://www.f2er.com/2549028.html

大家都在问