Автор Тема: Не могу использовать user-defined ресурс  (Прочитано 650 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Pat4005 [?]

  • Новичок
  • *
  • Сообщений: 85
  • Репутация: 4
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Недавно я наконец разобрался как упаковать все графические ресурсы моей программы внутрь исполняемого файла (спасибо Yashied за отличный FAQ :ok:). Но теперь они естественно перестали отображаться при запуске нескомпилированного скрипта, что затрудняет отладку. Тогда я скомпилировал одну копию скрипта со всеми нужными ресурсами и просто ссылался на неё внутри au3. Теперь ресурсы иконок, упакованные как иконки загружаются, а png, упакованные как user-defined – нет.
Почему так?

Ресурсы извлекаю этим:
Код: AutoIt [Выделить]
Func _LoadResourceImage($hInstance, $sResType, $sResName, $iResLanguage = 0)
    Local $hInfo, $hData, $pData, $iSize, $hMem, $pMem, $hStream, $hImage

    If $iResLanguage Then
        $hInfo = _WinAPI_FindResourceEx($hInstance, $sResType, $sResName, $iResLanguage)
    Else
        $hInfo = _WinAPI_FindResource($hInstance, $sResType, $sResName)
    EndIf
    $hData = _WinAPI_LoadResource($hInstance, $hInfo)
    $iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
    $pData = _WinAPI_LockResource($hData)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    $hMem = DllCall("kernel32.dll", "ptr", "GlobalAlloc", "uint", 2, "ulong_ptr", $iSize)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    $pMem = DllCall("kernel32.dll", "ptr", "GlobalLock", "ptr", $hMem[0])
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    DllCall("kernel32.dll", "none", "RtlMoveMemory", "ptr", $pMem[0], "ptr", $pData, "ulong_ptr", $iSize)
    DllCall("kernel32.dll", "int", "GlobalUnlock", "ptr", $hMem[0])
    $hStream = _WinAPI_CreateStreamOnHGlobal($hMem[0])
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    _GDIPlus_Startup()
    $hImage = DllCall("gdiplus.dll", "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "ptr*", 0)
    If (@error) Or ($hImage[0]) Or (Not $hImage[2]) Then
        $hImage = 0
    EndIf
    _GDIPlus_Shutdown()
    DllCall("kernel32.dll", "ptr", "GlobalFree", "ptr", $hMem[0])
    If Not IsArray($hImage) Then
        Return SetError(1, 0, 0)
    EndIf
   
    Return $hImage[2]
EndFunc   ;==>_LoadResourceImage


Русское сообщество AutoIt

Не могу использовать user-defined ресурс
« Отправлен: Август 14, 2014, 18:16:40 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
7949 Просмотров
Последний ответ Июль 31, 2010, 11:18:11
от Otherworld
1 Ответов
5157 Просмотров
Последний ответ Октябрь 31, 2010, 15:42:15
от Max98
7 Ответов
7846 Просмотров
Последний ответ Январь 04, 2011, 14:04:30
от Kaster
5 Ответов
7644 Просмотров
Последний ответ Август 03, 2012, 14:15:06
от madmasles
2 Ответов
2357 Просмотров
Последний ответ Январь 30, 2014, 22:15:36
от InnI
2 Ответов
2018 Просмотров
Последний ответ Апрель 01, 2014, 18:53:16
от alex33
13 Ответов
7176 Просмотров
Последний ответ Апрель 22, 2015, 14:19:10
от joiner
1 Ответов
1748 Просмотров
Последний ответ Апрель 18, 2016, 20:52:19
от WR-e-D
0 Ответов
661 Просмотров
Последний ответ Сентябрь 15, 2017, 07:22:50
от mir546
4 Ответов
1457 Просмотров
Последний ответ Октябрь 17, 2017, 02:40:55
от Garrett