rpcrt4: Fix handling of complex types of return values on the client side.

This commit is contained in:
Alexandre Julliard 2011-06-10 15:11:40 +02:00
parent 1c632ffe8e
commit b0f8586078

View File

@ -332,11 +332,8 @@ static void client_do_args(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat,
case PROXY_UNMARSHAL: case PROXY_UNMARSHAL:
if (pParam->param_attributes.IsOut) if (pParam->param_attributes.IsOut)
{ {
if (pParam->param_attributes.IsReturn) if (pParam->param_attributes.IsReturn) pArg = pRetVal;
call_unmarshaller(pStubMsg, &pRetVal, pTypeFormat, 0); call_unmarshaller(pStubMsg, &pArg, pTypeFormat, 0);
else
call_unmarshaller(pStubMsg, &pArg, pTypeFormat, 0);
TRACE("pRetVal = %p\n", pRetVal);
} }
break; break;
default: default:
@ -386,9 +383,8 @@ static void client_do_args(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat,
case PROXY_UNMARSHAL: case PROXY_UNMARSHAL:
if (pParam->param_attributes.IsOut) if (pParam->param_attributes.IsOut)
{ {
if (pParam->param_attributes.IsReturn) if (pParam->param_attributes.IsReturn) pArg = pRetVal;
call_unmarshaller(pStubMsg, &pRetVal, pTypeFormat, 0); if (pParam->param_attributes.IsByValue)
else if (pParam->param_attributes.IsByValue)
call_unmarshaller(pStubMsg, &pArg, pTypeFormat, 0); call_unmarshaller(pStubMsg, &pArg, pTypeFormat, 0);
else else
call_unmarshaller(pStubMsg, (unsigned char **)pArg, pTypeFormat, 0); call_unmarshaller(pStubMsg, (unsigned char **)pArg, pTypeFormat, 0);