Patch from Filipe Cabecinhas who said:
There were two bugs in my previous patch. The first is that, when passing arguments by value that are represented by a pointer in a VARIANT, variantDataPointer was returning a pointer to the pointer. The second one is not allowing to create arrays of VARIANT (the behaviour we had by default before). svn: r9771
This commit is contained in:
parent
9f5e4a6dd9
commit
1ca628a1b8
|
@ -264,7 +264,7 @@ void* variantDataPointer(VARTYPE vt,VARIANTARG *pVariantArg)
|
|||
case VT_I1 | VT_BYREF : return &pVariantArg->pcVal;
|
||||
case VT_UI1 : return &pVariantArg->bVal;
|
||||
case VT_UI1 | VT_BYREF : return &pVariantArg->pbVal;
|
||||
case VT_I2 : return &(pVariantArg->iVal);
|
||||
case VT_I2 : return &pVariantArg->iVal;
|
||||
case VT_I2 | VT_BYREF : return &pVariantArg->piVal;
|
||||
case VT_UI2 : return &pVariantArg->uiVal;
|
||||
case VT_UI2 | VT_BYREF : return &pVariantArg->puiVal;
|
||||
|
@ -287,7 +287,7 @@ void* variantDataPointer(VARTYPE vt,VARIANTARG *pVariantArg)
|
|||
case VT_R4 | VT_BYREF : return &pVariantArg->pfltVal;
|
||||
case VT_R8 : return &pVariantArg->dblVal;
|
||||
case VT_R8 | VT_BYREF : return &pVariantArg->pdblVal;
|
||||
case VT_BSTR : return &pVariantArg->bstrVal;
|
||||
case VT_BSTR : return pVariantArg->bstrVal;
|
||||
case VT_BSTR | VT_BYREF : return &pVariantArg->pbstrVal;
|
||||
case VT_CY : return &pVariantArg->cyVal;
|
||||
case VT_CY | VT_BYREF : return &pVariantArg->pcyVal;
|
||||
|
@ -297,7 +297,7 @@ void* variantDataPointer(VARTYPE vt,VARIANTARG *pVariantArg)
|
|||
case VT_BOOL | VT_BYREF : return &pVariantArg->pboolVal;
|
||||
case VT_ERROR : return &pVariantArg->scode;
|
||||
case VT_ERROR | VT_BYREF : return &pVariantArg->pscode;
|
||||
case VT_DISPATCH : return &pVariantArg->pdispVal;
|
||||
case VT_DISPATCH : return pVariantArg->pdispVal;
|
||||
case VT_DISPATCH | VT_BYREF : return &pVariantArg->ppdispVal;
|
||||
// VT_USERDEFINED | VT_BYREF indicates that we should pass the
|
||||
// IUnknown pointer of a COM object.
|
||||
|
@ -305,7 +305,7 @@ void* variantDataPointer(VARTYPE vt,VARIANTARG *pVariantArg)
|
|||
// bash it out to VT_UNKNOWN.
|
||||
case VT_USERDEFINED | VT_BYREF : return &pVariantArg->punkVal;
|
||||
case VT_VARIANT | VT_BYREF : return &pVariantArg->pvarVal;
|
||||
case VT_UNKNOWN : return &pVariantArg->punkVal;
|
||||
case VT_UNKNOWN : return pVariantArg->punkVal;
|
||||
case VT_UNKNOWN | VT_BYREF : return &pVariantArg->ppunkVal;
|
||||
case VT_VARIANT : return pVariantArg;
|
||||
case VT_PTR :
|
||||
|
@ -366,9 +366,7 @@ void doSetArrayElts(Scheme_Object *vec, VARTYPE elementType, SAFEARRAY *theArray
|
|||
elt = SCHEME_VEC_ELS(vec)[i];
|
||||
currNdx[offset] = i;
|
||||
marshalSchemeValueToVariant(elt,&variant);
|
||||
// I don't think this will ever happen (at least when calling
|
||||
// this function from the scheme side).
|
||||
if (variant.vt != elementType) {
|
||||
if (variant.vt != elementType && elementType != VT_VARIANT) {
|
||||
char errBuff[100];
|
||||
sprintf(errBuff,
|
||||
"Unable to put an element of COM type 0x%x into an array of COM type 0x%x",
|
||||
|
|
Loading…
Reference in New Issue
Block a user