예제 #1
0
        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);
        }
예제 #2
0
 public void CleanUpNativeData(IntPtr pNativeData)
 {
     Xpcom.Free(pNativeData);
 }