コード例 #1
0
        // 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 { }
            }
        }
コード例 #2
0
        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 { }
            }
        }
コード例 #3
0
        // 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 { }
            }
        }