Seite 1 von 1
Mit Python auf DLL zugreifen.
Verfasst: Donnerstag 17. Februar 2005, 15:04
von 2bock
Hi zusammen.
Ich greife mit Python auf eine VB DLL zu. Klappt so eigentlich wunderbar. Nur Kann ich auch auf vb Properties zugreifen? Ich schaffe es nur auf Function zuzugreifen. Funktion heißt ungefähr so: "Public Property Get Status(......."
Also kann man von Python aus auf Properties in einer VB DLL auch zugreifen?
Greetz from 2bock
Verfasst: Donnerstag 17. Februar 2005, 15:16
von Leonidas
Hast du ctypes benutzt?
Nutze Win32Com
Verfasst: Donnerstag 17. Februar 2005, 15:19
von 2bock_not_logged
Nein ich möchte das ohne ctypes machen. Nur mit win32com.
Gruß 2bock
Verfasst: Donnerstag 17. Februar 2005, 15:49
von Leonidas
Wie sieht denn so ein Code aus, der deine DLL benutzt?
Verfasst: Freitag 18. Februar 2005, 09:08
von 2bock_not_logged
Die Dll heißt Test.dll
Die Klasse clsArchive
Die Funktion heißt TestFunction(), habe ich aber nur erstellt, um auf die Property (TestProperty()) in Visual Basic zugreifen zu können. Sie dürfte wenns geht ruhig wegfallen. Übergeben werden soll nur ein boolsches wahr.
Code: Alles auswählen
import win32com.client as wc
class TestClass:
def __init__(self):
self.objLicenceClass = wc.Dispatch("Test.clsArchive")
def TestFunction(self):
return self.objLicenceClass.TestFunction(bool(1))
def TestProperty(self):
value = self.objLicenceClass.TestProperty(1)
return value
TC = TestClass()
print TC.TestFunction()
Greetz und schon mal ein Danke von 2bock
Edit (Leonidas): Code in Python Tags gesetzt.
Verfasst: Freitag 18. Februar 2005, 21:22
von Leonidas
Ich habe da nicht wirklich Ahnung, aber versuch es doch mal mit value = self.objLicenceClass.TestProperty?
Ja stimmt
Verfasst: Dienstag 22. Februar 2005, 09:05
von 2bock_not_logged
Hi.
Also Du hast natürlich recht. so kann man eine Property ansprechen und daten zurückbekommen. Das klappt auf wunderbar, nur beim Propertyaufruf parameter übergeben, habe ich noch nicht geschafft.
Greetz 2bock.
Verfasst: Dienstag 22. Februar 2005, 15:02
von Leonidas
Also ich kenne mich mit VB (nicht mehr) aus, aber Versuch es doch mal so, self.objLicenceClass.TestProperty = value. Vielleicht geht ja pywin32 besser als man denken könnte.
Nein das geht auch nicht
Verfasst: Dienstag 1. März 2005, 14:29
von 2bock_not_logged
Nein. Leider funktioniert dies auch nicht. Ich bekomme abe nun folgende Fehlermeldung
Code: Alles auswählen
File "MyLicence.py", line 24, in GetLicenceType
self.objLicenceClass.LicenseType = 1
File "D:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 543, in __setattr__
raise AttributeError, "Property '%s.%s' can not be set." % (self._username_, attr)
AttributeError: Property 'MyLicence.clsArchive.LicenseType' can not be set.
>Exit code: 1
Also so kann die Property nicht gesetzt werden. Schade.
Weiß vielleicht sonst noch jemand ne mögliche Lösung?
Greetz from 2bock
Verfasst: Dienstag 1. März 2005, 22:28
von BlackJack
Python-Properties funktionieren nur richtig, wenn man eine "New-Style" Klasse benutzt, also von `object`erbt. Hilft das vielleicht?
Vielleicht so?
Verfasst: Mittwoch 2. März 2005, 08:56
von 2bock_not_logged
Hi Black Jack.
Hättest Du vielleicht ein kleines Beispiel diesbezüglich?
Ich hab mal hier ein noch fehlerhaftes Beispiel im Netz gefunden, aber meinst Du das vielleicht so?
Code: Alles auswählen
>>> class C(object):
def __init__(self):
self.__x = 0
def getter(self):
return self.__x
def setter(self, value):
if value > 0:
self.__x = value
else:
self.__x = 0
def deleter(self):
print "you can't delete x!"
x=property(getter, setter, deleter)
# now x is not a simple attribute, it's a managed property "object"
>>> c = C()
>>> c.x
0
>>> c.x = 9
>>> c.x
9
>>> del c.x
you can't delete x!
>>> c.x
9
>>> c.x =-9
>>> c.x
0
>>> c.__x
Grettz from 2bock
Ähm eher nicht
Verfasst: Mittwoch 2. März 2005, 10:33
von 2bock_not_logged
Wobei dies hier wohl eher die andere richtung sein wird. Quasi eine Property in Python erstellen und in VB ansprechen.