This question is similar to one posed by Mike Graham in a recent thread, but I thought I'd see if I could rustle up any additional feedback.

I'm trying to called a COM automation object using Python. The wrinkle is that the method I need uses arguments by reference to store output from its execution. The signature looks like this:

TileGraphic(int FileType, int Margin, intObjMargin, BSTR FileName, BSTR DestName, float KFactor1, float KFactor2, int* Rows, int* Columns, int* X0, int* Y0, int* XExtent, int* YExtent, long InMemory, int* ErrorCode)


The Python code generated by makepy looks like:

def TileGraphic(self, FileType=defaultNamedNotOptArg, Margin=defaultNamedNotOptArg, ObjMargin=defaultNamedNotOptArg, FileName=defaultNamedNotOptArg , DestName=defaultNamedNotOptArg, KFactor1=defaultNamedNotOptArg, KFactor2=defaultNamedNotOptArg, Rows=pythoncom.Missing, Columns=pythoncom.Missing , X0=pythoncom.Missing, Y0=pythoncom.Missing, XExtent=pythoncom.Missing, YExtent=pythoncom.Missing, InMemory=defaultNamedNotOptArg
                        , ErrorCode=pythoncom.Missing):
return self._ApplyTypes_(125, 1, (24, 0), ((3, 1), (3, 1), (3, 1), (8, 1), (8, 1), (4, 1), (4, 1), (16387, 2), (16387, 2), (16387, 2), (16387, 2), (16387, 2), (16387, 2), (3, 1), (16387,
                                                                        2)), 
'TileGraphic', None,FileType
                        , Margin, ObjMargin, FileName, DestName, KFactor1
                        , KFactor2, Rows, Columns, X0, Y0
                        , XExtent, YExtent, InMemory, ErrorCode)


I'm somewhat unsure how to call it. If I just pass in variables with integer values for the by reference arguments, this is the output:

## All args after 940.0 are just variables containing integers


>>> app.TileGraphic(9, 0, 0, "Test.dxf", "Results", 1.0, 940.0, rows, cols,
x0, y0, xExtent, yExtent, 0, ErrorCode)
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (156, 0))

---------------------------------------------------------------------------
com_error Traceback (most recent call last)

c:\users\aaron\code\<ipython console> in <module>()

C:\Python25\lib\site-packages\pywin32-210n1-py2.5-win32.egg\win32com \gen_py\DAE1 337F-69EF-4233-B4E3-27C348C3D9D6x0x1x0.pyc in TileGraphic(self, FileType, Margin , ObjMargin, FileName, DestName, KFactor1, KFactor2, Rows, Columns, X0, Y0, XExt
ent, YExtent, InMemory, ErrorCode)
648 , Margin, ObjMargin, FileName, DestName, KFactor
1
    649                         , KFactor2, Rows, Columns, X0, Y0
--> 650                         , XExtent, YExtent, InMemory, ErrorCode)
    651
    652         def TurnLaserOff(self, CardNum=defaultNamedNotOptArg):

C:\Python25\lib\site-packages\pywin32-210n1-py2.5-win32.egg\win32com \client\__in it__.pyc in _ApplyTypes_(self, dispid, wFlags, retType, argTypes, user, resultCL
SID, *args)
    446                 return self._get_good_object_(
    447                     self._oleobj_.InvokeTypes(
--> 448 dispid, 0, wFlags, retType, argTypes, *arg
s),
    449                     user, resultCLSID)
    450

com_error: (-2147352567, 'Exception occurred.', (0, 'winlase.Automate', 'Error d
uring Tiling', None, 0, -2147467259), None)


I have also tried using pythoncom.Missing and pythoncom.ArgNotFound per Mark Hammond's suggestion. I thought by reference input variables were supposed to be converted to output tuples by makepy. Am I missing something here? If I try and execute the method without any of the input reference variables, I get this error:

TypeError: int() argument must be a string or a number, not 'NoneType'


_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to