// finds resource names within provided module and using provided resource type public static ushort[] GetResourceNames(IntPtr module, uint type) { var parameter = new GetResourceNamesParameter(GetResourceNamesParameter.MaxResultCount); var parameterPtr = IntPtr.Zero; try { parameterPtr = Marshal.AllocHGlobal(Marshal.SizeOf(parameter)); Marshal.StructureToPtr(parameter, parameterPtr, false); if (!EnumResourceNames(module, type, GetResourceNamesCallback, parameterPtr)) { var error = Marshal.GetLastWin32Error(); if (error != (int)SystemErrorCode.ERROR_RESOURCE_TYPE_NOT_FOUND) { throw new Win32Exception(error); } } parameter = (GetResourceNamesParameter)Marshal. PtrToStructure(parameterPtr, typeof(GetResourceNamesParameter)); return(parameter.Result.Take(parameter.ResultLength).ToArray()); } catch (Exception ex) { throw new Win32Exception("Unable to get resource names", ex); } finally { try { if (parameterPtr != IntPtr.Zero) { Marshal.DestroyStructure(parameterPtr, typeof(GetResourceNamesParameter)); } } catch { } } }
public static uint[] GetResourceIds(IntPtr module, PInvoke.ResourceType resourceType, PInvoke.PrimaryLanguage primaryResourceLanguage = PInvoke.PrimaryLanguage.LANG_NEUTRAL, PInvoke.SecondaryLanguage secondaryResourceLanguage = PInvoke.SecondaryLanguage.SUBLANG_NEUTRAL, PInvoke.EnumResourceNamesFlags flags = PInvoke.EnumResourceNamesFlags.RESOURCE_ENUM_LN) { var parameter = new GetResourceNamesParameter(GetResourceNamesParameter.MaxResultCount); IntPtr parameterPtr = IntPtr.Zero; try { parameterPtr = Marshal.AllocHGlobal(Marshal.SizeOf(parameter)); Marshal.StructureToPtr(parameter, parameterPtr, false); var language = GetLanguage(primaryResourceLanguage, secondaryResourceLanguage); if (!PInvoke.EnumResourceNamesEx(module, resourceType, GetResourceNamesCallback, parameterPtr, flags, language)) { if (Marshal.GetLastWin32Error() != (int)PInvoke.SystemErrorCode.ERROR_RESOURCE_TYPE_NOT_FOUND) throw GetLastException(); } parameter = (GetResourceNamesParameter)Marshal. PtrToStructure(parameterPtr, typeof(GetResourceNamesParameter)); return parameter.Result.Take(parameter.ResultLength).ToArray(); } catch (Exception ex) { throw new InvalidOperationException("Unable to get resource names", ex); } finally { try { if (parameterPtr != IntPtr.Zero) Marshal.DestroyStructure(parameterPtr, typeof(GetResourceNamesParameter)); } catch { } } }
// finds resource names within provided module and using provided resource type public static ushort[] GetResourceNames(IntPtr module, uint type) { var parameter = new GetResourceNamesParameter(GetResourceNamesParameter.MaxResultCount); var parameterPtr = IntPtr.Zero; try { parameterPtr = Marshal.AllocHGlobal(Marshal.SizeOf(parameter)); Marshal.StructureToPtr(parameter, parameterPtr, false); if (!EnumResourceNames(module, type, GetResourceNamesCallback, parameterPtr)) { var error = Marshal.GetLastWin32Error(); if (error != (int)SystemErrorCode.ERROR_RESOURCE_TYPE_NOT_FOUND) throw new Win32Exception(error); } parameter = (GetResourceNamesParameter)Marshal. PtrToStructure(parameterPtr, typeof(GetResourceNamesParameter)); return parameter.Result.Take(parameter.ResultLength).ToArray(); } catch (Exception ex) { throw new Win32Exception("Unable to get resource names", ex); } finally { try { if (parameterPtr != IntPtr.Zero) Marshal.DestroyStructure(parameterPtr, typeof(GetResourceNamesParameter)); } catch { } } }