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