Pytho nnet передача аргументов c# dll - PullRequest
1 голос
/ 30 марта 2020

Я использую 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! Я не буду удалять этот вопрос, если другие люди столкнутся с такой же проблемой.

...