mzdude wrote:
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

     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'

comtypes.BSTR is a type; the type error makes clear you need
an instance, as above.

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)

This likely indicates that the DLL is using the C calling convention
and not the stdcall calling convention.  Use CDLL rather than WinDLL
to load the DLL.

You might like to join the ctypes-users mailing list at sourceforge.

--
-------------------------------------------------------------------------
Andrew I MacIntyre                     "These thoughts are mine alone..."
E-mail: [EMAIL PROTECTED]  (pref) | Snail: PO Box 370
       [EMAIL PROTECTED]             (alt) |        Belconnen ACT 2616
Web:    http://www.andymac.org/               |        Australia
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to