Pythonから.netVBコードへの接続を確立しています。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
dllにコンパイルされたVB.netクラス:
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でインスタンスを作成してから、クラス定義ではなく、インスタンスのメソッドを呼び出す必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加