Andrew MacIntyre schrieb:
> Thomas Heller wrote:
>
>> I would very much like to fix this issue, but I still have to find
>> one or two COM objects (on my system) that use both 'propput' and
>> 'propputref' for the same property. It would be great if someone
>> can help me to construct some test cases.
>
> I know that the ArcGIS COM API has at least one example where a
> property has both propput and propputref, but to the best of my
> knowledge its for functionality that I've never needed to use. I'll
> see if I can dredge up the specifics.
>
> My off-the-cuff thought: generate a helper that calls the propputref
> if the value is a COM pointer, and the propput otherwise.
>
> I suspect that a fair bit of code that might otherwise need this uses
> a VARIANT parameter instead and thus avoids the apparent
> duplication.
Thanks for this suggestion.
I've experimented a bit and am gaining (hopefully) more understanding of this
issue.
I have hacked up the following:
If both a 'propput' and a 'propputref' for a property named 'Prop' is present,
comtypes
creates two Python properties: The first named 'Prop' which uses the COM
'propget' call
for reading, and the 'propput' call for writing the COM property.
The second I named 'Prop_ref_' which is only writable, and uses the COM
'propputref' call.
Then I found the 'Scripting.Dictionary' COM object that has all three
('propget', 'propput',
and 'propputref') so I could experiment a bit.
Then, I located a COM object (of ourself) that has a defaultvalue with dispid 0.
When I assign a COM pointer to this COM object to the dictionary's 'Item', it
will retrieve
the defaultvalue from the COM pointer and store that.
When I assign a pointer to the dictionaries 'Item_ref_', it will store the COM
pointer itself.
Fine, so far. If I understand you correctly, you suggest that setting the
'Item' property
should automatically determine what should happen:
def _set_Item(self, value):
if has_default_value_with_dispid_zero(value):
# use the 'propputref' COM method
else:
# use the 'propput' COM method
Is that the semantics that the COM property requires?
Is this what VB does? Or is there a way in VB to select between the two things?
I tried to code up a jscript and vbscript test, but failed.
Thomas
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
comtypes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/comtypes-users