我正在使用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的出色开发,完美地处理了类型转换和参数传递!万一其他人遇到同样的问题,我不会删除这个问题。