public PluginLibrary(string name, params PluginEngine[] engines) { if (engines == null) { throw new ArgumentNullException("engines"); } _engines = new ReadOnlyCollection <PluginEngine>((PluginEngine[])engines.Clone()); unsafe { gvplugin_library_t *library = (gvplugin_library_t *)Marshal.AllocHGlobal(Marshal.SizeOf(typeof(gvplugin_library_t))); _library = new SafeMarshalHGlobalHandle((IntPtr)library, true); library->apis = (gvplugin_api_t *)Marshal.AllocHGlobal((engines.Length + 1) * Marshal.SizeOf(typeof(gvplugin_api_t))); _apis = new SafeMarshalHGlobalHandle((IntPtr)library->apis, true); library->apis[engines.Length] = new gvplugin_api_t(); library->packagename = (byte *)Marshal.StringToHGlobalAnsi(name); _packageName = new SafeMarshalHGlobalHandle((IntPtr)library->packagename, true); for (int i = 0; i < engines.Length; i++) { library->apis[i].api = engines[i].Api; library->apis[i].types = engines[i].InstalledPluginData; } } }
public static extern unsafe void gvAddLibrary(SafeContextHandle gvc, gvplugin_library_t *lib);