[python-win32] VB Interfaces
Fri, 13 Dec 2002 12:02:00 +1300
Well I'm afraid that my first posting contained a mistake. I've been able
to get a little closer to the problem that is occuring in my actual VB DLL
Here, then is an update on my problem.
The following VB classes are compiled into a DLL
' ...... INumber.cls (an Interface class)
Function setn(ByVal i As Integer)
'n = i
Function getn() As Integer
'getn = n
'..........Number.cls (a concrete class)
Private n As Integer
Function INumber_setn(ByVal i As Integer)
n = i
Function INumber_getn() As Integer
INumber_getn = n
' A factory for making Number objects
Function makeN(ByVal i As Integer) As INumber
Dim n As INumber
Set n = New Number
Set makeN = n
Set n = Nothing
' A way of displaying the value of an arbitrary number of INumber objects
Function val(ParamArray n())
On Error GoTo err
Dim inf As INumber
Dim i As Integer
For i = LBound(n) To UBound(n)
' Set inf = n(i)
' MsgBox "1. Value = " & inf.getn
MsgBox "2. Value = " & n(i).getn
MsgBox "error" & err.Description
Now this code can be called from a VB script, e.g.:
' .......... main.bas
Dim t As New test
Dim n As INumber
Set n = t.makeN(5)
t.val n, n
However, from Python it fails:
>>> t = Dispatch("TestDll16.test")
>>> n = t.makeN( 23 )
>>> t.val( n,n )
The VB error MsgBox says that the object does not support the method requested.
Now, if one exchanges the two commented lines inside the For loop of the val
function above with the single line (MsgBox "2. Value = " & n(i).getn) then the
Python code does work (and so does the original VB script).
This seems to be the crux of my problem. In the VB DLL I am trying to
use from Python, there are a number of such VB 'short cuts'.
Why is it that when VB is calling this code it works, but a Python
client makes the VB code fail?
It seems that a rewrite of the VB code will fix this, but I am reluctant to
do that unless I understand the failure mechanism better and understand
precisely what should be changed.
Thanks for helping.