从Python调用.NET库函数

2024-10-01 15:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这里几乎是束手无策了,希望你们能帮我解决这个问题。我正在运行64位的AnacondaPython3.5并编译Python.NET为Python添加.NET功能的anaconda包。我导入了一个由某人发送给我的DLL,我的代码如下所示:

from __future__ import (
    unicode_literals,
    print_function,
    division,
    absolute_import
)

import clr

from System import String, Char, Int32

clr.setPreload(True)

clr.AddReference('System.Windows.Forms')

clr.AddReference(
        "C:\\Program Files\\XYZ\\TTE.dll"
)

import TTE

from System.Windows.Forms import Form, Application, Button
import System

tt = TTE.TT()

form = Form()
# declaring string (not python native string) to get System.String
cdbp = String('C:\\')
sdbp = String('C:\\')
mdbp = String('C:\\')

tt.Initialize(cdbp, sdbp, mdbp, form)

'''
tt.Initialize.Overloads[
    System.String, System.String, System.String, System.Windows.Forms.Form](
        cdbp, sdbp, mdbp, form
)
'''

运行Initialize函数时,出现以下异常:

^{pr2}$

我对.NET相当陌生,并尝试过在google上搜索并查看所有与Python.NET但是我找不到我要找的信息。另一个奇怪的地方是,同一个DLL在VB中使用时正常工作,在python中使用时失败。为什么会这样?在

我以为问题出在Python.NET考虑到我调用的是另一个名为Initialize的(重载)函数,所以我尝试了重载调用(在注释中),它给了我以下异常:

Traceback (most recent call last):
  File "C:/Users/as/All/Code/try1.py", line 261, in <module>
System.Windows.Forms.Form](cdbp, sdbp,
TypeError: No match found for signature

然后根据建议,我打印了过载,这是输出

Int32 Initialize(System.String ByRef, System.String ByRef, System.String ByRef, System.Windows.Forms.Form, ResultEnum ByRef, ResultEnum ByRef, ResultEnum ByRef)
Int32 Initialize(System.Collections.Specialized.StringCollection ByRef, System.String ByRef, System.String ByRef, System.Windows.Forms.Form, ResultEnum ByRef, ResultEnum ByRef, ResultEnum ByRef)
Int32 Initialize(System.Collections.Generic.List`1[System.String] ByRef, System.String ByRef, System.String ByRef, System.Windows.Forms.Form, ResultEnum ByRef, ResultEnum ByRef, ResultEnum ByRef)

我可以清楚地理解重载为什么会抱怨,但我所针对的VB函数Initialize已将最后三个resultnum参数声明为可选,但Python显然需要它。在

有什么特别的方向我应该看吗?在


Tags: fromimportformstringnetwindowsformssystem

热门问题