Я использую Pytho nnet 2.4.0 для доступа к C# dll. У меня машина Windows 10 с Python 3.7.6.
Я пытаюсь использовать метод, который принимает в качестве аргумента только строку пути, но мне не удается заставить его работать.
import clr
sys.path.append(os.getcwd)
clr.AddReference('C#Wrapper')
path = "C:\\Users\\Username\\Folder"
c#class.method(string path)
Если я использую атрибут overloads из pytho nnet, он говорит мне, что аргумент должен иметь тип System.String, однако выполнение чего-либо подобного ниже не помогло:
path = System.String("C:\\Users\\Username\\Folder")
Я получаю сообщение об ошибке TypeError: метод не соответствует заданным аргументам. Нужно ли кодировать строку или сделать массив символов для того, чтобы 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 Basi c, чтобы написать мою Python программу, в которой она говорила что-то вроде этого:
classobj = c#class
Однако в Python вам нужно написать:
classobj = c#class()
Таким образом, отсутствующая скобка вызывала Ошибка типа: метод не соответствует заданным аргументам , что очень вводило в заблуждение. Преобразование типов и передача аргументов отлично обрабатываются благодаря удивительным разработчикам phytho nnet! Я не буду удалять этот вопрос, если другие люди столкнутся с такой же проблемой.