<div dir="ltr">Thanks very much for commenting~ </div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-07-19 0:22 GMT+08:00 Jacek Caban <span dir="ltr"><<a href="mailto:jacek@codeweavers.com" target="_blank">jacek@codeweavers.com</a>></span>:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Shuai,<br>
<br>
A few comments:<br>
<br>
- We probably should propagate unrelated errors. So if FAILED(hres) &&<br>
hres != DISP_E_TYPEMISMATCH, we should return hres<br>
<br>
    if(FAILED(hres))<br>
        return return_bool(res, FALSE);<br>
    else<br>
        return return_bool(res, TRUE);<br>
<br>
Why not:<br>
    return return_bool(res, SUCCEEDED(hres))<br>
<br>
static HRESULT return_bool(VARIANT *res, BOOL val)<br>
{<br>
    if(res) {<br>
        V_VT(res) = VT_BOOL;<br>
        V_BOOL(res) = val;<br>
    }<br>
    return S_OK;<br>
}<br>
<br>
VARIANT_BOOL uses VARIANT_TRUE/VARIANT_FALSE values, so this should be:<br>
V_BOOL(res) = val ? VARIANT_TRUE : VARIANT_FALSE;<br>
<br>
Cheers,<br>
Jacek<br>
<div class=""><br>
<br>
<br>
On 07/18/14 17:29, Shuai Meng wrote:<br>
> Thanks all for commenting, I changed the implementation and put the<br>
> codes<br>
> here: <a href="https://github.com/Shuai-Meng/wine/commit/bb212763ffd639a238b5a47f2c6a27047a79fdc5" target="_blank">https://github.com/Shuai-Meng/wine/commit/bb212763ffd639a238b5a47f2c6a27047a79fdc5</a><br>
><br>
> It passed on both winxp and wine. But this patch still needs your<br>
> comments.<br>
><br>
><br>
><br>
> 2014-07-18 17:30 GMT+08:00 Jacek Caban <<a href="mailto:jacek@codeweavers.com">jacek@codeweavers.com</a><br>
</div>> <mailto:<a href="mailto:jacek@codeweavers.com">jacek@codeweavers.com</a>>>:<br>
<div class="">><br>
>     On 07/18/14 04:11, Shuai Meng wrote:<br>
>><br>
>><br>
>><br>
>>     2014-07-17 11:11 GMT+08:00 Dmitry Timoshkov <<a href="mailto:dmitry@baikal.ru">dmitry@baikal.ru</a><br>
</div>>>     <mailto:<a href="mailto:dmitry@baikal.ru">dmitry@baikal.ru</a>>>:<br>
>><br>
>>         Shuai Meng <<a href="mailto:mengshuaicalendr@gmail.com">mengshuaicalendr@gmail.com</a><br>
<div><div class="h5">>>         <mailto:<a href="mailto:mengshuaicalendr@gmail.com">mengshuaicalendr@gmail.com</a>>> wrote:<br>
>><br>
>>         > +        switch(V_VT(arg)) {<br>
>>         > +        case VT_UI1:<br>
>>         > +        case VT_I2:<br>
>>         > +        case VT_I4:<br>
>>         > +        case VT_I8:<br>
>>         > +        case VT_R4:<br>
>>         > +        case VT_R8:<br>
>>         > +        case VT_BOOL:<br>
>>         > +        case VT_EMPTY:<br>
>>         > +        case VT_CY:<br>
>>         > +            V_BOOL(res) = VARIANT_TRUE;<br>
>>         > +            break;<br>
>><br>
>>         This list is far from being complete. It seems that it should<br>
>>         also<br>
>>         contain at least VT_UI2, VT_UI4, VT_UI8, VT_I1, VT_INT, VT_UINT.<br>
>>         VT_VECTOR, VT_ARRAY and VT_BYREF modifers probably also should be<br>
>>         taken into account.<br>
>><br>
>>         --<br>
>>         Dmitry.<br>
>><br>
>>     Hi, I think over it again. Let's face the fact: what are all the<br>
>>     possible results of  switch(V_VT(arg)) ? Will VT_UI2, VT_UI4,<br>
>>     VT_UI8, VT_I1, VT_INT, VT_UINT and so on exist? My answer is no.<br>
>>     arg comes from users' input, which means it only belongs to the<br>
>>      subtypes of variant, see here:<br>
>>     <a href="http://msdn.microsoft.com/en-us/library/9e7a57cf(v=vs.84).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/9e7a57cf(v=vs.84).aspx</a><br>
</div></div>>>     <<a href="http://msdn.microsoft.com/en-us/library/9e7a57cf%28v=vs.84%29.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/9e7a57cf%28v=vs.84%29.aspx</a>><br>
<div class="HOEnZb"><div class="h5">><br>
>     No, your answer is wrong. VBScript code may be called from<br>
>     non-VBScript (and the other way around) and then any type of<br>
>     VARIANT may be passed around. Also, please add a test with an<br>
>     object having default value, which is of numeric type. I have a<br>
>     feeling that the right thing to do here is to call to_double and<br>
>     see if it fails or not, but this needs tests to confirm.<br>
><br>
>     Jacek<br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>