1 pièce(s) jointe(s)
énumérer les ressources d'un programme
Bonjour,
j'utilise les informations fournies par le site p/invoke pour énumérer les ressources d'un programme. J'ai pris un programme au hasard dans mon pc. Il contient des ressources possédant des noms et d'autres possédant un ID.
L'énumération des types est correcte, celles de noms aussi. Seule l'énumération des langues pose problème.
L'appel de la fonction EnumResourceLanguages retourne false pour les seules ressources possédant un nom. Elle fonctionne bien avec les ressources ayant seulement un ID.
bool bret = EnumResourceLanguages(hModule, lpszType,
lpszName, new EnumResLangDelegate(EnumResLangCallback), lParam);
if (bret == false)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
Le code d'erreur est inconnu. J'utilise Ps pour obtenir la valeur décimale, hexadécimale et le texte :
PS C:\Users\noel> [ComponentModel.Win32Exception] -532462766
Unknown error (0xe0434352)
Un extrait de l'affichage pour montrer l'anomalie :
Type : WEVT_TEMPLATE
Name: 1
erreur: -532462766
Type : XMLFILE
Name: 100
erreur: -532462766
Type : 2
Name: 1
Language: 1033
Name: 2
Language: 1033
Je joins mon code source pour faciliter la réponse.
Merci d'avance.
mauvaise signature de EnumResourceLanguages
// [DllImport("kernel32.dll")]
// static extern bool EnumResourceLanguages(IntPtr hModule, IntPtr lpszType,
// IntPtr lpName, EnumResLangDelegate lpEnumFunc, IntPtr lParam);
[DllImport("kernel32.dll",
CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool EnumResourceLanguages(IntPtr hModule, IntPtr lpszType,
IntPtr lpName, EnumResLangDelegate lpEnumFunc, IntPtr lParam);
C'était tout simplement une mauvaise signature pour cette fonction.
Il n'y a plus d'erreur :
Type : EDPPERMISSIVEAPPINFOID
Name: MICROSOFTEDPPERMISSIVEAPPINFO
Language: 1033
Type : MUI
Name: 1
Language: 1036
Language: 1033