private bool LoadGirderPlugin(string girderPluginFile) { string folder = Path.GetDirectoryName(girderPluginFile); string parent = Directory.GetParent(folder).FullName; SetDllDirectory(parent); _pluginDll = LoadLibrary(girderPluginFile); if (_pluginDll == IntPtr.Zero) throw new InvalidOperationException(String.Format("Failed to call LoadLibrary on girder plugin dll ({0})", girderPluginFile)); try { IntPtr function; function = GetProcAddress(_pluginDll, "gir_version"); _girVersion = (gir_version) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_version)); function = GetProcAddress(_pluginDll, "gir_name"); _girName = (gir_name) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_name)); function = GetProcAddress(_pluginDll, "gir_description"); _girDescription = (gir_description) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_description)); function = GetProcAddress(_pluginDll, "gir_devicenum"); _girDevicenum = (gir_devicenum) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_devicenum)); function = GetProcAddress(_pluginDll, "gir_requested_api"); _girRequestedApi = (gir_requested_api) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_requested_api)); function = GetProcAddress(_pluginDll, "gir_open"); _girOpen = (gir_open) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_open)); function = GetProcAddress(_pluginDll, "gir_close"); _girClose = (gir_close) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_close)); function = GetProcAddress(_pluginDll, "gir_command_gui"); if (function != IntPtr.Zero) // Optional. _girCommandGui = (gir_command_gui) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_command_gui)); function = GetProcAddress(_pluginDll, "gir_info"); if (function != IntPtr.Zero) // Optional. _girInfo = (gir_info) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_info)); function = GetProcAddress(_pluginDll, "gir_event"); if (function != IntPtr.Zero) // Optional. _girEvent = (gir_event) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_event)); function = GetProcAddress(_pluginDll, "gir_start"); if (function != IntPtr.Zero) // Optional. _girStart = (gir_start) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_start)); function = GetProcAddress(_pluginDll, "gir_stop"); if (function != IntPtr.Zero) // Optional. _girStop = (gir_stop) Marshal.GetDelegateForFunctionPointer(function, typeof (gir_stop)); return true; } catch { FreeLibrary(_pluginDll); } return false; }
private bool LoadGirderPlugin(string girderPluginFile) { string folder = Path.GetDirectoryName(girderPluginFile); string parent = Directory.GetParent(folder).FullName; SetDllDirectory(parent); _pluginDll = LoadLibrary(girderPluginFile); if (_pluginDll == IntPtr.Zero) { throw new InvalidOperationException(String.Format("Failed to call LoadLibrary on girder plugin dll ({0})", girderPluginFile)); } try { IntPtr function; function = GetProcAddress(_pluginDll, "gir_version"); _girVersion = (gir_version)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_version)); function = GetProcAddress(_pluginDll, "gir_name"); _girName = (gir_name)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_name)); function = GetProcAddress(_pluginDll, "gir_description"); _girDescription = (gir_description)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_description)); function = GetProcAddress(_pluginDll, "gir_devicenum"); _girDevicenum = (gir_devicenum)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_devicenum)); function = GetProcAddress(_pluginDll, "gir_requested_api"); _girRequestedApi = (gir_requested_api)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_requested_api)); function = GetProcAddress(_pluginDll, "gir_open"); _girOpen = (gir_open)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_open)); function = GetProcAddress(_pluginDll, "gir_close"); _girClose = (gir_close)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_close)); function = GetProcAddress(_pluginDll, "gir_command_gui"); if (function != IntPtr.Zero) // Optional. { _girCommandGui = (gir_command_gui)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_command_gui)); } function = GetProcAddress(_pluginDll, "gir_info"); if (function != IntPtr.Zero) // Optional. { _girInfo = (gir_info)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_info)); } function = GetProcAddress(_pluginDll, "gir_event"); if (function != IntPtr.Zero) // Optional. { _girEvent = (gir_event)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_event)); } function = GetProcAddress(_pluginDll, "gir_start"); if (function != IntPtr.Zero) // Optional. { _girStart = (gir_start)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_start)); } function = GetProcAddress(_pluginDll, "gir_stop"); if (function != IntPtr.Zero) // Optional. { _girStop = (gir_stop)Marshal.GetDelegateForFunctionPointer(function, typeof(gir_stop)); } return(true); } catch { FreeLibrary(_pluginDll); } return(false); }