private NuGenMashallingDescriptorItem ReadNativeType() { NuGenMashallingDescriptorItem result = new NuGenMashallingDescriptorItem(); uint data; NuGenHelperFunctions.StepIntPtr(ref signatureBlob, NuGenSignatureCompression.CorSigUncompressData(SignatureBlob, out data)); result.NativeType = (CorNativeType)data; result.IsNativeType = true; switch (result.NativeType) { case CorNativeType.NATIVE_TYPE_SAFEARRAY: result.NextItem = ReadVariantType(); break; case CorNativeType.NATIVE_TYPE_CUSTOMMARSHALER: result.Guid = ReadString(); result.UnmanagedType = ReadString(); result.ManagedType = ReadString(); result.Cookie = ReadString(); break; case CorNativeType.NATIVE_TYPE_ARRAY: result.NextItem = ReadNativeType(); NuGenHelperFunctions.StepIntPtr(ref signatureBlob, NuGenSignatureCompression.CorSigUncompressData(SignatureBlob, out data)); result.ParamNumber = (int)data; if (result.ParamNumber > ParameterCount) { result.ParamNumber = -1; } NuGenHelperFunctions.StepIntPtr(ref signatureBlob, NuGenSignatureCompression.CorSigUncompressData(SignatureBlob, out data)); result.ElemMultiply = (int)data; NuGenHelperFunctions.StepIntPtr(ref signatureBlob, NuGenSignatureCompression.CorSigUncompressData(SignatureBlob, out data)); result.NumberElem = (int)data; break; case CorNativeType.NATIVE_TYPE_FIXEDSYSSTRING: NuGenHelperFunctions.StepIntPtr(ref signatureBlob, NuGenSignatureCompression.CorSigUncompressData(SignatureBlob, out data)); result.NumberElem = (int)data; break; case CorNativeType.NATIVE_TYPE_FIXEDARRAY: NuGenHelperFunctions.StepIntPtr(ref signatureBlob, NuGenSignatureCompression.CorSigUncompressData(SignatureBlob, out data)); result.NumberElem = (int)data; result.NextItem = ReadNativeType(); break; } return(result); }
private NuGenMashallingDescriptorItem ReadVariantType() { NuGenMashallingDescriptorItem result = new NuGenMashallingDescriptorItem(); uint data; NuGenHelperFunctions.StepIntPtr(ref signatureBlob, NuGenSignatureCompression.CorSigUncompressData(SignatureBlob, out data)); result.VariantType = (VariantType)data; result.IsNativeType = false; return(result); }