How to pass true or false to COM objects?

Duncan Booth duncan at NOSPAMrcp.co.uk
Mon Aug 19 04:53:54 EDT 2002


sjoshi at ingr.com (Sunit Joshi) wrote in 
news:8f8ffe67.0208161214.4a39ce42 at posting.google.com:

> I'm using MSXML4.0 and need to pass 'true' or 'false' values to the
> COM object. Could someone tell me how to do that..??

If my memory serves (and it might not), then passing True or False as 
values will work providing you are using Python 2.2.1 or later. In earlier 
versions you should make sure you pass in the result of a comparison: e.g. 
add:
   True, False = 1==1, 1==0
somewhere in your code and you now have suitable values to pass in.

The explanation for this weirdness is that normally Python optimises any 
expression involving small integers by reusing the same objects for these 
integers (so for example '(7+3) is (1000/100)' is true. The exception to 
this rule is that comparisons use their own 0 and 1 objects (e.g. '1 is 
3>2' has the value 0). The COM system makes use of this fact to guess 
whether it should pass an integer or a boolean outside Python.

As of 2.2.1 new builtins True and False were added which expose the boolean 
1 and 0 objects. In a future version they may become a separate boolean 
type (subclassing int).

-- 
Duncan Booth                                             duncan at rcp.co.uk
int month(char *p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
"\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?



More information about the Python-list mailing list