예제 #1
0
 /// <summary>
 /// frees all unmanaged memory assoicated with a DISPPARAMS structure
 /// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms221416(v=vs.85).aspx
 /// </summary>
 /// <param name="pDispParams"></param>
 private static void UnprepareDispatchArgs(ComTypes.DISPPARAMS pDispParams)
 {
     if (pDispParams.rgvarg != IntPtr.Zero)
     {
         // free the array of COM VARIANTs
         var variantStructSize      = RdMarshal.SizeOf(typeof(VARIANT));
         var variantArgsArrayOffset = pDispParams.rgvarg;
         var argIndex = 0;
         while (argIndex < pDispParams.cArgs)
         {
             VariantClear(variantArgsArrayOffset);
             variantArgsArrayOffset += variantStructSize;
             argIndex++;
         }
         RdMarshal.FreeHGlobal(pDispParams.rgvarg);
     }
 }