Функция вызова dll работает в IronPython, не работает в CPython3.4, выдает ошибку «Ни один метод не соответствует заданным аргументам».

Для проекта мне нужно включить DLL в Python. Я использую CPython3.4 и для включения dll использую модуль pythonnet clr (pythonnet-2.0.0.dev1-cp34-none-win_amd64.whl). В dll мне нужна функция, которая дает мне непрерывное обновление измерения. dll написана на VB.net, нужная мне функция показана ниже:

Public Sub AdviseStart(ByVal item As Integer, ByVal a As Action(Of Object)) Implements IConversation.AdviseStart
    _parameterPoller.RegisterCallback(item, a)
End Sub

Это код, который я написал на питоне для вызова этой функции:

import clr
clr.AddReference('dll name')
from dll import SetupMonitor

monitor = SetupMonitor(None, None, None)

# call to the dll function
# Everytime the measurement is changed the "test" function should be executed
monitor.AdviseStart(8, test)

def test(data):
    print("Value: " + str(data))   

Ради моего дальнейшего проекта я хочу использовать Python3.4, а не Ironpython. Я протестировал этот код в python3.4 и 2.7 и получил эту ошибку:

No method matches given arguments

Я на 100% уверен, что ошибка связана с функцией AdviseStart. Потому что когда я использую тот же код с IronPython, он работает. В Ironpython эти коды дают результат, который я ожидаю:

Value: -74

Цель этой функции состоит в том, что каждый раз, когда производится новое измерение, будет вызываться функция «тест». Все для измерения и вызова есть в dll. Могу ли я заставить эту функцию работать в любой версии CPython?


person Rowan Klein Gunnewiek    schedule 09.04.2015    source источник


Ответы (1)


Были некоторые проблемы с целочисленными аргументами в 64-битных сборках. Насколько мне известно, эта конкретная проблема была решена, но это произошло после того, как была выпущена используемая вами сборка.

Попробуйте получить исходный код с github (https://github.com/renshawbay/pythonnet) и вместо этого соберите его. . Чтобы собрать и установить его, просто запустите «python setup.py install» (или любую из обычных команд setup.py).

Если это все еще не работает, вы можете создать отладочную версию, установив CONFIG="Debug" в setup.py и пересобрав. Затем вы сможете подключить отладчик Visual Studio к процессу python и просмотреть код python.net, чтобы увидеть, какие сигнатуры он находит и почему он не соответствует аргументам, с которыми вы его вызываете.

person Tony Roberts    schedule 14.04.2015
comment
Я пробовал это решение, но запуск установки python setup.py дает мне следующую ошибку: Файл C:\Python34\lib\site-packages\pkg_resources_init_.py, строка 1025, в add dists.sort (key=operator.attrgetter('hashcmp'), reverse=True) TypeError: неупорядоченные типы: str() ‹ NoneType() - person Rowan Klein Gunnewiek; 15.04.2015