当前位置: 代码迷 >> python >> pythonnet无法从vb .net dll调用方法-TypeError
  详细解决方案

pythonnet无法从vb .net dll调用方法-TypeError

热度:112   发布时间:2023-06-21 10:52:58.0

我们正在建立从python到.net VB代码的连接。 我们在VB中成功创建了DLL,并且可以使用CLR将其导入python。 DLL中的类已导入,所有方法都可见。 但是,当我们调用一个方法时,我们会因TypeErrors而失败-甚至没有参数的方法也会失败。 PS。 其他(标准)VB方法也可以正常工作(例如, from System import String a=String("Some string") )PS2。 用C#编写的代码也可以使用此方法正常工作

与.dll连接的Python代码:

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-    
    import os,sys
    import site
    scriptPath=r"E:\Dropbox\SISTeMA\TRE development\TRE Add-In\visum\Visum_VB_interactions\From PTV\VisumNetAddIn\32Bit"
    assemblyPath=r"E:\Dropbox\SISTeMA\TRE development\TRE Add-In\visum\Visum_VB_interactions\Interact\bin\Debug\Interact.dll"
    site.addsitedir(scriptPath)
    import clr
    import System
    assemblyPath = os.path.join(scriptPath,assemblyPath)
    site.addsitedir(os.path.dirname(assemblyPath))
    assemblyFile,extension  = os.path.splitext(os.path.basename(assemblyPath))
    clr.AddReference(assemblyFile)   
    from Interact import Interact_Class

VB .net类已编译为dll:

Imports System
Public Class Interact_Class
    Public s As String

    Public Sub give_me()
        s = "got it"
    End Sub

    Public Sub give_me_sth(ByVal sth As String)
        s = sth
    End Sub

    Public Function I_will_give_you() As String
        Return "Here You go"
    End Function
End Class

Python调用:

from Interact import Interact_Class
print Interact_Class.give_me
Interact_Class.give_me()
from System import String
s=String("I will give You")
print Interact_Class.give_me_sth(s)
print Interact_Class.I_will_give_you()

产生的错误:

Interact_Class.give_me()
TypeError: not enough arguments

print Interact_Class.give_me_sth(s)
TypeError: No method matches given arguments

print Interact_Class.I_will_give_you()
TypeError: not enough arguments

非常感谢!

在Python代码中,您正在使用VB类,就好像它是C#术语中的静态类,还是VB.Net术语中的模块。

您需要在python中创建它的实例,然后在该实例上调用方法,而不是类定义。

  相关解决方案