Ссылка, которую разместил Дарин (которая впоследствии была помечена как ответ), не содержит функционального кода.Я оценил размещенный там код (http://khason.net/blog/how-to-load-unmanaged-native-resources-from-managed-c-code/)) и обнаружил, что он не работает должным образом для любого растрового изображения, встроенного в любую DLL-библиотеку win32, в качестве ресурса растрового изображения.
Кроме того, Ганс Пассант пропускает множество шаговэффективно превращая его пост в бесполезный.
Единственное, что мне удалось найти, - это статья, написанная в 2004 году для мусорной корзины XP Theme. Вы можете найти метод GetResourcePNG в ThemeManager.cs здесь http://www.codeproject.com/KB/miscctrl/XPTaskBar.aspx
Однако следует отметить, что у меня возникли большие трудности с этим методом, так как вызов bitmap.RotateFlip (RotateFlipType.Rotate180FlipX) вызывает проблемы с памятью при попыткеДоступ к pngs в authui.dll на моей системе
Обновление:
Я нашел код, указанный здесь (http://www.vbaccelerator.com/home/NET/Code/Controls/Explorer_Bar/ExplorerBar_Control_Source_Code.asp), безусловно, самый функциональный, производятНаименьшее количество ошибок и дает самые быстрые результаты. Код написан на C #, хотя доменное имя будет указывать иначе. Использование двух классов;mageUtility и ResourceLibrary, вы можете легко извлечь PNG из стандартной библиотеки ресурсов, отличной от .net / dll:
public static Bitmap GetStandardResourceBitmap(String dllName, String resourceId) {
Bitmap result = null;
using (ResourceLibrary library = new ResourceLibrary() { Filename = dllName }) {
IntPtr hDib = library.GetResource(resourceId, ResourceLibrary.ImageType.IMAGE_BITMAP, ResourceLibrary.ImageLoadOptions.LR_CREATEDIBSECTION);
if (!hDib.Equals(IntPtr.Zero)) {
result = ImageUtility.DibToBitmap(hDib);
ImageUtility.DeleteObject(hDib);
}
}
return result;
}
Я решил, что resourceId в моем методе - String, только потому, что это не так.требуется перегрузка и использование пронумерованных идентификаторов ресурсов так же просто, как и добавление '#'.
GetStandardResourceBitmap("shell32.dll", "#632");
Cheers