James Hawkins : oleaut32: Only BYREF DispCallFunc args whose input args are not BYREF should be changed .

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jun 6 05:15:49 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 585763ffa91ba10291e2a2eff27b7dd8fd623611
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=585763ffa91ba10291e2a2eff27b7dd8fd623611

Author: James Hawkins <truiken at gmail.com>
Date:   Mon Jun  5 17:48:15 2006 -0500

oleaut32: Only BYREF DispCallFunc args whose input args are not BYREF should be changed.

---

 dlls/oleaut32/typelib.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index c4b2f56..21c69a9 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -5360,9 +5360,11 @@ static HRESULT WINAPI ITypeInfo_fnInvoke
                 {
                     if (wParamFlags & PARAMFLAG_FOUT)
                     {
-                        hres = VariantChangeType(&pDispParams->rgvarg[pDispParams->cArgs - 1 - i],
-                                                 &rgvarg[i], 0,
-                                                 V_VT(&pDispParams->rgvarg[pDispParams->cArgs - 1 - i]));
+                        VARIANTARG *arg = &pDispParams->rgvarg[pDispParams->cArgs - 1 - i];
+
+                        if ((rgvt[i] == VT_BYREF) && (V_VT(arg) != VT_BYREF))
+                            hres = VariantChangeType(arg, &rgvarg[i], 0, V_VT(arg));
+
                         if (FAILED(hres))
                         {
                             ERR("failed to convert param %d to vt %d\n", i,




More information about the wine-cvs mailing list