Мне нужно всего 24 байта.
blockquote>Компилятору требуется пространство для обратного адреса и базового указателя. Поскольку вы находитесь в режиме 64 бит, это еще 16 байт. Всего 40. Разорвите это до 32-байтной границы, и вы получите 64.
@efotinis: Вы правы.
Вот обходное решение, пока py2exe не фиксируется, и Вы не хотите включать тот же значок дважды:
hicon = win32gui.CreateIconFromResource(win32api.LoadResource(None, win32con.RT_ICON, 1), True)
Знайте, что 1 не идентификатор, который Вы дали значку в setup.py (который является идентификатором группы значка), но идентификатор ресурса, автоматически присвоенный py2exe каждому значку в каждой группе значка. По крайней мере это - то, как я понимаю это.
Если Вы хотите создать значок с указанным размером (поскольку CreateIconFromResource использует размер значков системного значения по умолчанию), необходимо использовать CreateIconFromResourceEx, который не доступен через PyWin32:
icon_res = win32api.LoadResource(None, win32con.RT_ICON, 1)
hicon = ctypes.windll.user32.CreateIconFromResourceEx(icon_res, len(icon_res), True,
0x00030000, 16, 16, win32con.LR_DEFAULTCOLOR)
При использовании wxPython можно использовать следующий простой код:
wx.Icon(sys.argv[0], wx.BITMAP_TYPE_ICO)
У меня обычно есть код, который проверяет, работает ли он от EXE или не и действует соответственно:
def get_app_icon():
if hasattr(sys, "frozen") and getattr(sys, "frozen") == "windows_exe":
return wx.Icon(sys.argv[0], wx.BITMAP_TYPE_ICO)
else:
return wx.Icon("gfx/myapp.ico", wx.BITMAP_TYPE_ICO)
Ну, хорошо... Я установил py2exe, и я думаю, что это - ошибка. В py2exe_util.c они должны init rt_icon_id
к 1 вместо 0. Путем это теперь, невозможно загрузить первый формат первого значка с помощью LoadIcon/LoadImage.
Я уведомлю разработчиков об этом, если это уже не будет известная проблема.
Обходное решение, тем временем, должно было бы включать тот же значок дважды в Ваш setup.py:
'icon_resources': [(1, 'my_icon.ico'), (2, 'my_icon.ico')]
Можно загрузить второй, в то время как Windows будет использовать первый в качестве значка оболочки. Не забудьте использовать ненулевые идентификаторы все же.:)
Необходимо установить значок ID на что-то другое, чем 0:
'icon_resources': [(42, 'my_icon.ico')]
Идентификаторы ресурса Windows должны быть между 1 и 32767.