1. Trying to load resources from the external modules leads to crash the script because you call _WinAPI_FreeLibrary().
#Region #AutoIt3Wrapper_Res_File_Add=Silverlight.png, 10, TEST #EndRegion #Include "Resources.au3" GUICreate('', 256, 256) $Pic = GUICtrlCreatePic('', 64, 64, 128, 128) GUISetState() FileCopy(@ScriptFullPath, @ScriptDir & 'Duplicate.exe', 1) _ResourceSetImageToCtrl($Pic, 'TEST', 10, @ScriptDir & 'Duplicate.exe') Do Until GUIGetMsg() = -3
2. A memory leak.
#Region #AutoIt3Wrapper_Res_File_Add=Silverlight.png, 10, TEST #EndRegion #Include "Resources.au3" GUICreate('', 256, 256) $Pic = GUICtrlCreatePic('', 64, 64, 128, 128) GUISetState() Run(@SystemDir & 'taskmgr.exe') MsgBox(0, '', '') For $i = 1 To 1000 _ResourceSetImageToCtrl($Pic, 'TEST') Next MsgBox(0, '', '') Do Until GUIGetMsg() = -3
3. _ResourceSetImageToCtrl() does not fully supports transparent and semitransparent images such as .png. Because _GDIPlus_BitmapCreateHBITMAPFromBitmap() creates a DDB, but need to DIB. Just replace _GDIPlus_BitmapCreateHBITMAPFromBitmap() to _GDIPlus_BitmapCreateDIBFromBitmap()...

Func _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap) Local $tBIHDR, $Ret, $tData, $pBits, $hResult = 0 $Ret = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0) If (@error) Or ($Ret[0]) Then Return 0 EndIf $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $Ret[2], $Ret[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB) $pBits = DllStructGetData($tData, 'Scan0') If Not $pBits Then Return 0 EndIf $tBIHDR = DllStructCreate('dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword') DllStructSetData($tBIHDR, 1, DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 2, $Ret[2]) DllStructSetData($tBIHDR, 3, $Ret[3]) DllStructSetData($tBIHDR, 4, 1) DllStructSetData($tBIHDR, 5, 32) DllStructSetData($tBIHDR, 6, 0) $hResult = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBIHDR), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0) If (Not @error) And ($hResult[0]) Then DllCall('gdi32.dll', 'dword', 'SetBitmapBits', 'ptr', $hResult[0], 'dword', $Ret[2] * $Ret[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0')) $hResult = $hResult[0] Else $hResult = 0 EndIf _GDIPlus_BitmapUnlockBits($hBitmap, $tData) Return $hResult EndFunc ;==>_GDIPlus_BitmapCreateDIBFromBitmap
Edited by Yashied, 08 September 2011 - 01:52 AM.






