From: Thomas H. <th...@ct...> - 2008-05-29 09:19:50
|
Mustafa, are you still interested in a solution? If so, can you get the most recent source code from this SVN branch (please make sure you clear the comtypes\gen directory after that) http://svn.python.org/projects/ctypes/branches/comtypes-0.4/ I changed the way [in, out] parameters are handled with comtypes; it should be possible now for you to call the method without any parameter: >>> myrefs = Send.GetListOfDependantFiles() Thanks, Thomas Mustafa Görmezer schrieb: > Hi Thomas, > > that wasn`t it. Your example returns me a list of 500 Nones. It`s right, > the method expects a list or a tuple. But it does not matter what is in > the list. It returns me everything. > > Hint: The number 500 was to initialize the BSTR array with a size of > 500. Do I need it in Python ?! > > The problem is the same with win32com, here: > https://sourceforge.net/tracker/?func=detail&atid=551954&aid=1920299&group_id=78018 > > Any other ideas ? > > best regards > > Mustafa Görmezer > > > Thomas Heller schrieb: >> Mustafa Görmezer schrieb: >>> Hello, >>> >>> I am automating a CAD System which expects a so called >>> CATSafeArrayVariant. This is defined as one-dimensional arrays of >>> CATVariants. When I am right, this should work now with comtypes. But >>> how do I use it when a method expects it by reference ? >>> >>> In pure Python (where no "by reference" exists) I would simply use this >>> to get a list of file names: >>> >>> myrefs = Send.GetListOfDependantFiles() >>> >>> In VB (which works) it looks like: >>> >>> Dim arrayOfVariantOfBSTR() >>> ReDim arrayOfVariantOfBSTR(500) >>> Call Send.GetListOfDependantFiles(arrayOfVariantOfBSTR) >>> >>> After this I can find the results in the arrayOfVariantOfBSTR, which can >>> be used in a for each loop. >> >> I looked into the generated file that you sent me offline. The GetListOfDependantFiles() >> method uses an [in, out] parameter, apparently a SAFEARRAY of BSTR (an array of strings). >> >> You must call the method with a list (or tuple) containing strings, comtypes will >> pack these automatically into a safearray, the com object will insert its results >> into the safearray, and comtypes will unpack it again and return a them as a sequence. >> >> So I assume that something like this *should* work: >> >> result = send.GetListOfDependantFiles([None] * 500) >> for item in result: >> print item >> >> Thomas |