Retrieving BSTR * from a DLL

mzdude jsanga at cox.net
Wed Jul 9 17:34:59 EDT 2008


I need to interface with a windows DLL that has the following
signature

extern "C" void Foo( BSTR in, BSTR *out )

Code so far

>>> from ctypes import *
>>> import comtypes
>>> LPBSTR = POINTER(comtypes.BSTR)
>>>
>>> hdl = windll.MyDll.Foo
>>> hdl.rettype = None
>>> hdl.argtypes = [comtypes.BSTR, LPBSTR]
>>>
>>> inStr = comtypes.BSTR(u'Some Silly String')
>>> out = comtypes.BSTR
>>>
>>> hdl(inStr,byref(out))

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    hdl(inStr,byref(out))
TypeError: byref() argument must be a ctypes instance, not
'_ctypes.SimpleType'

Also tried the following

>>> out = comtypes.BSTR(u'')
>>> p = pointer(out)
>>> hdl(inStr,p)

Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    hdl(inStr,p)
ValueError: Procedure probably called with too many arguments (8 bytes
in excess)

Any feedback would be appreciated.



More information about the Python-list mailing list