> This just occurred to me -- I'll bet that is supposed to be a pointer to > an array of floats, isn't it? Then yes, you have a problem. That's not > the proper way to pass an array in COM. In the dispatch mechanism, > you're supposed to pass it as a safe array structure that contains > sizing information. By declaring a float *, there's no way for the > marshalling mechanism to know how large the array is.
Yes! That's what it is supposed to be (no wonder I wasn't able to find it on Google, I assumed that VTS_PR4 was a standardized constant). The manufacturer has acknowledged that they set it up wrong, but it's unlikely they'll fix it. > I think you are going to have to use other magic to access this > function. I'm not sure there is any way to coerce makepy into > generating an array of floats to satisfy a float *. Hmm. As in abandoning win32com.Client and writing a Cython wrapper? The function in question (ReadTag) takes both a pointer to an array of floats plus a parameter, nWords, that indicates the size of the array. Perhaps I could do something like this: from array import array a = array('f', [0, 0, 0, 0, 0]) iface = win32com.Client('RPco.X') # last parameter to method is array size iface.ReadTag('data', a, 0, len(a)) len(a) would provide the information the COM object needs about the array size. However, when I attempt this code, I get the following error: *only length-1 arrays can be converted to Python scalars* I'm a bit stumped at this point. Is there an easy way to marshal the array into the right format needed? Brad _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32