@@ -193,8 +193,10 @@ public override void CallAsProcedure(int methodNumber, IValue[] arguments)
193193 try
194194 {
195195 var argsData = MarshalArguments ( arguments ) ;
196+ var initialValues = new object [ argsData . values . Length ] ;
197+ Array . Copy ( argsData . values , initialValues , initialValues . Length ) ;
196198 DispatchUtility . Invoke ( Instance , dispId , argsData . values , argsData . flags ) ;
197- RemapOutputParams ( arguments , argsData . values , argsData . flags [ 0 ] ) ;
199+ RemapOutputParams ( arguments , argsData . values , argsData . flags [ 0 ] , initialValues ) ;
198200 }
199201 catch ( System . Reflection . TargetInvocationException e )
200202 {
@@ -221,8 +223,10 @@ public override void CallAsFunction(int methodNumber, IValue[] arguments, out IV
221223 try
222224 {
223225 var argsData = MarshalArguments ( arguments ) ;
226+ var initialValues = new object [ argsData . values . Length ] ;
227+ Array . Copy ( argsData . values , initialValues , initialValues . Length ) ;
224228 var result = DispatchUtility . Invoke ( Instance , dispId , argsData . values , argsData . flags ) ;
225- RemapOutputParams ( arguments , argsData . values , argsData . flags [ 0 ] ) ;
229+ RemapOutputParams ( arguments , argsData . values , argsData . flags [ 0 ] , initialValues ) ;
226230 retValue = CreateIValue ( result ) ;
227231 }
228232 catch ( System . Reflection . TargetInvocationException e )
@@ -236,11 +240,12 @@ public override void CallAsFunction(int methodNumber, IValue[] arguments, out IV
236240 }
237241 }
238242
239- private void RemapOutputParams ( IValue [ ] arguments , object [ ] values , ParameterModifier flags )
243+ private void RemapOutputParams ( IValue [ ] arguments , object [ ] values , ParameterModifier flags ,
244+ object [ ] initialValues )
240245 {
241246 for ( int i = 0 ; i < arguments . Length ; i ++ )
242247 {
243- if ( flags [ i ] )
248+ if ( flags [ i ] && ! initialValues [ i ] . Equals ( values [ i ] ) )
244249 {
245250 var variable = ( IVariable ) arguments [ i ] ;
246251 variable . Value = CreateIValue ( values [ i ] ) ;
0 commit comments