Я недавно работал с ресурсами из вторичных библиотек/двоичных модулей и обнаружил странную ошибку.Проблема EnumResourceNames - неизвестная ошибка
У меня есть два родных ссылки WinAPI:
[DllImport("kernel32.dll", SetLastError = true)]
public extern static bool EnumResourceNames(IntPtr hModule, int lpszType, EnumResNameProc lpEnumFunc, IntPtr lParam);
[DllImport("kernel32.dll", SetLastError=true)]
public extern static IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, int dwFlags);
Когда я звоню LoadLibraryEx, я получаю экземпляр IntPtr - именно то, что мне нужно:
IntPtr x = WinApi.LoadLibraryEx(@"D:\Software\Reflector\Reflector.exe",IntPtr.Zero,2);
Debug.WriteLine(x.ToInt32());
Однако, когда я пытаюсь перечислить иконку ресурсы (определены ID = 3):
Debug.WriteLine(WinApi.EnumResourceNames(x, 3, new EnumResNameProc(ListCallback), IntPtr.Zero));
Debug.WriteLine(Marshal.GetLastWin32Error());
Я получаю этот код ошибки (возвращается b у GetLastError):
-532462766
Это обычно означает, что существует неизвестная ошибка, насколько я знаю, но я просто любопытно - что может быть проблема с распечаткой ресурсы из исполняемого файла?
Является ли EnumResourceNames() фактическим возвратом false? Если он возвращает true, значение GetLastError() не имеет смысла. – Luke
Управляется или неуправляемая DLL? –
Возвращается False - это, по-видимому, терпит неудачу. Это управляемое приложение C#, вызывающее неуправляемую DLL (kernel32). –