public static PluginTag[] GetPluginTags() { PluginTag[] tags; IntPtr pluginTagsArrayPtr = IntPtr.Zero; try { uint aCount = 0; pluginTagsArrayPtr = _pluginHost.Instance.GetPluginTags(ref aCount); int count = (int)aCount; IntPtr[] tagPtrs = new IntPtr[count]; tags = new PluginTag[count]; Marshal.Copy(pluginTagsArrayPtr, tagPtrs, 0, tagPtrs.Length); for (int i = 0; i < count; i++) { object tag = null; try { tag = Xpcom.GetObjectForIUnknown(tagPtrs[i]); tags[i] = new PluginTag(Xpcom.QueryInterface <nsIPluginTag>(tag)); } finally { if (tag != null) { Marshal.ReleaseComObject(tag); } } } } finally { if (pluginTagsArrayPtr != IntPtr.Zero) { Xpcom.Free(pluginTagsArrayPtr); } } return(tags); }
public void CleanUpNativeData(IntPtr pNativeData) { Xpcom.Free(pNativeData); }