public static List<NamedValue> ConvertToNamedValueList(IntPtr pXmlSection) { if (IntPtr.Zero == pXmlSection) return null; List<Rhino.Render.NamedValue> list = new List<NamedValue>(); IntPtr pIterator = UnsafeNativeMethods.Rdk_XmlSection_GetIterator(pXmlSection); //Fill the property list from the XML section if (pIterator != IntPtr.Zero) { while (true) { using (var sh = new StringHolder()) { Variant variant = new Variant(); if (1 == UnsafeNativeMethods.Rdk_XmlSection_NextParam(pXmlSection, pIterator, sh.ConstPointer(), variant.ConstPointer())) { NamedValue nv = new NamedValue(sh.ToString(), variant.AsObject()); list.Add(nv); } else break; } } UnsafeNativeMethods.Rdk_XmlSection_DeleteIterator(pIterator); } return list; }