我最近在处理来自二级库/二进制模块的资源,遇到了一个奇怪的错误。
我有两个本机 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());
我收到此错误代码(由 GetLastError 返回):
-532462766
据我所知,这通常意味着存在未知错误,但我只是好奇 - 从可执行文件中列出资源可能有什么问题?