[python-win32] VT_DECIMAL variant

2020-04-14 Thread Nikita Lepetukhin
Hello!

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.


There is a COM interface:
interface IProperty : IDispatch
{
...
 [propget, id(DISPID_VALUE)]
 HRESULT Value([out, retval] VARIANT* pVal);

 [propput, id(DISPID_VALUE)]
 HRESULT Value([in] VARIANT new_value);
...
}

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),
}
_prop_map_put_ = {
"Value": ((0, LCID, 4, 0),()),
}
...

In python code I get the object by the following way:

comObj = win32com.client.Dispatch("XXX.XXX.4")
prop = comObj.Property # prop is IProperty

The problem is here:
prop.Value = 0.123456

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!


Regards,
Nikita Lepetukhin
___
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32


[python-win32] (no subject)

2020-04-14 Thread Nikita Lepetukhin
Hello!

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.


There is a COM interface:
interface IProperty : IDispatch
{
...
 [propget, id(DISPID_VALUE)]
 HRESULT Value([out, retval] VARIANT* pVal);

 [propput, id(DISPID_VALUE)]
 HRESULT Value([in] VARIANT new_value);
...
}

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),
}
_prop_map_put_ = {
"Value": ((0, LCID, 4, 0),()),
}
...

In python code I get the object by the following way:

comObj = win32com.client.Dispatch("XXX.XXX.4")
prop = comObj.Property # prop is IProperty

The problem is here:
prop.Value = 0.123456

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!


Regards,
Nikita Lepetukhin
___
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32


Re: [python-win32] VT_DECIMAL variant

2020-04-14 Thread Tim Roberts


> On Apr 14, 2020, at 7:09 PM, Nikita Lepetukhin  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