Tim, thanks for replying!

VT_CY number doesn’t fit the precision I need (16 digits to the right of
the decimal point). It has only 4 digits according to this description:

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-oaut/5a2b34c4-d109-438e-9ec8-84816d8de40d


The decimal (VT_DECIMAL) has precision up to 28 places (
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-oaut/b5493025-e447-4109-93a8-ac29c48d018d
<https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-oaut/b5493025-e447-4109-93a8-ac29c48d018d>).
It is exactly the same as python decimal has. They match to each other
exactly and much better than VT_CY and python decimal. So maybe it wasn’t
the best solution to automatically convert python decimal to VT_CY variant.
Whatever.. what’s done is done.


As I understand there is another way (“manual”) to make the property set
call. Could you show how to make it?


Nikita Lepetukhin

ср, 15 апр. 2020 г. в 09:03, Tim Roberts <t...@probo.com>:

>
>
> On Apr 14, 2020, at 7:09 PM, Nikita Lepetukhin <leni...@gmail.com> wrote:
>
> I use win32com module and everything is ok but I cannot find the way how
> to pass VT_DECIMAL variant value to COM object's method.
> ...
> This is how the interface is described in gencache:
> class IProperty(DispatchBaseClass):
> CLSID = IID('{0A4C05A0-107B-4A8B-9E34-44ED9B117A25}')
> coclass_clsid = IID('{2171DCF1-B70B-4CAB-9EB7-F7FED71956B4}')
>
> _prop_map_get_ = {
> "Value": (0, 2, (12, 0), (), "Value", None),
> }
>
>
> That’s a property that returns a VT_VARIANT.
>
>
> In python code I get the object by the following way:
> ...
> I need to pass here VT_DECIMAL variant (due to data precision
> requirements) but it comes to COM object implementation as VT_R8 variant.
> I tried to use decimal python type but it comes as VT_CY variant.
>
> Could you help me to find out how to pass VT_DECIMAL variant from python
> to COM?
> I would appreciate your help very much!
>
>
> The VT_CY type, the Python decimal type, and the C# decimal type are all
> the same — a 128-point fixed point value with 92 bits of precision.  That’s
> probably what you should use.  In order to use VT_DECIMAL, then you
> probably can’t use automatic translation.
> —
> Tim Roberts, t...@probo.com
> Providenza & Boekelheide, Inc.
>
> _______________________________________________
> python-win32 mailing list
> python-win32@python.org
> https://mail.python.org/mailman/listinfo/python-win32
>
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to