internal object DatabasePluginInfoThunk(object[] args) { DatabaseLink link = new DatabaseLink(); link.Size = Marshal.SizeOf(typeof(DatabaseLink)); link.GetCapability = GetCapabilityThunk; link.GetFriendlyName = GetFriendlyNameThunk; link.GrokHeader = GrokHeaderThunk; link.Init = InitPreThunk; link.MakeDatabase = MakeDatabaseThunk; link.Unload = UnloadPreThunk; DatabaseLinkHandle = new UnmanagedStructHandle<DatabaseLink>(ref link); DatabaseLinkGcHandle = GCHandle.Alloc(link); return DatabaseLinkHandle.IntPtr; }
private void ProbeDatabasePluginInfoExport() { UIntPtr pProc = NativeMethods.GetProcAddress(handle, DatabasePluginInfoProc); if (pProc == UIntPtr.Zero) throw new MissingMethodException(DatabasePluginInfoProc); DatabasePluginInfoPrototype proc = (DatabasePluginInfoPrototype) Marshal.GetDelegateForFunctionPointer(Translate.ToHandle(pProc), typeof (DatabasePluginInfoPrototype)); IntPtr pDbLink = proc(IntPtr.Zero); if (pDbLink != IntPtr.Zero) databaseLink = (DatabaseLink) Marshal.PtrToStructure(pDbLink, typeof (DatabaseLink)); else throw new ArgumentException(DatabasePluginInfoProc); }