| |
|
|
Sven Bader | allô zusammen,
folgendes Thema schiebe je déjà une Weile avant mir ici, weil es zwar dans aucun Profan Version de 10 jusqu'à X4 funktioniert mais très wohl dans Profan2CPP.
but ist es, Ressourcen aus dem laufenden Programme ou bien einer DLL trop magasin, quelle mais emballé sommes et mittels RtlDecompressBuffer entpackt volonté doit. ca sollte alles soll passer, sans une Dossier zwischenzuspeichern.
cela Problem ist, dass FindResource/LoadResource une Speicheradresse zurückgibt, quelle je dans einem Logint speichere et avec cela pas weiterarbeiten peux.
cela simpelste Beispiel, wohin es dans XProfan déjà knallt ist: umcompressedSize& = Long(res2&,0)
dans RtlDecompressBuffer ensuite 2x pour res1& et res2&, XProfan hätte ici wohl volontiers selbst dimensionierte Bereiche dans forme de res1# et res2#.
Nochmal: dans Profan2Cpp fonctionne qui Code, qui Werte (pas qui Adresse!) qui Integers volonté ici korrekt comme Speicheradresse erkannt.
Hilft mir ici une weitere Zuweisung, un copymemory, une Typenkonvertierung?
ici qui Code et anbei qui Voir le texte source + qui Resourcen-DLL zum testen.
$H opengl.ph
declare texture&,dll&
Def RtlCompressBuffer(8) !"ntdll.dll", "RtlCompressBuffer"
Def RtlDecompressBuffer(6) !"ntdll.dll", "RtlDecompressBuffer"
Def RtlGetCompressionWorkSpaceSize(3) !"ntdll.dll", "RtlGetCompressionWorkSpaceSize"
Def RtlMoveMemory(3) !"kernel32.dll", "RtlMoveMemory"
Def LoadResource(2) !"KERNEL32","LoadResource"
Def FindResource(3) !"KERNEL32","FindResourceA"
Def LockResource(1) !"KERNEL32","LockResource"
Def FreeResource(1) !"KERNEL32","FreeResource"
Def SizeofResource(2) !"KERNEL32","SizeofResource"
dll& = UseDLL("rgba.dll")
cls
Proc OpenResource
parameters Typ$,nom$
ENDPROC
Proc LoadPackedBGRA
Paramètres nom$,iWidth&,iHeight&
Déclarer umcompressedSize&,umcompressed#,typ$,res1&,res2&,bworkspaacesize&
typ$ ="PACKED"
OpenResource("PACKED", nom$)
res1& = FindResource(dll&, addr(nom$), addr(typ$))
res2& = LoadResource(dll&, res1&)
LockResource(res2&)
umcompressedSize& = Long(res2&,0)'<- ici knallt es zum 1. la fois, un Lonint avec Speicheradresse wird ici pas korrekt verarbeitet
'Den pourrait on aussi encore berechnen
'umcompressedSize& = (iWidth& * iHeight& * 4)
dim umcompressed#, umcompressedSize&
'Gescheiteter Versuch, es trop retten
'declare res2#,res1#
'res2# = res2&
'res1# = res1&
'dim res1#, 100'???
'dim res2#, umcompressedSize&
'RtlDecompressBuffer(2,umcompressed#,umcompressedSize&,res2#+4,SizeofResource(%hInstance, res1#)-4,Addr(bworkspacesize&))
'ici knallt es probablement doppelt chez res1& et res&, là ici wieder Speicheradressen dans einem Longint stehen
RtlDecompressBuffer(2,umcompressed#,umcompressedSize&,res2&+4,SizeofResource(dll&, res1&)-4,Addr(bworkspacesize&))
'dans USHORT CompressionFormat
'out PUCHAR UncompressedBuffer
'dans ULONG UncompressedBufferSize
'dans PUCHAR CompressedBuffer <- une loning Variable
'dans ULONG CompressedBufferSize
'out PULONG FinalUncompressedSize
declare txID&
txID& = 1
ogl("glGenTextures",1, addr(txID&))
ogl("glBindTexture",~GL_TEXTURE_2D, txID&)
ogl("glEnable",~GL_ALPHA_TEST)'RGBA
ogl("glTexEnvi",~GL_TEXTURE_ENV, ~GL_TEXTURE_ENV_MODE, ~GL_MODULATE)
ogl("glTexImage2D",~GL_TEXTURE_2D,0,~GL_RGBA,iWidth&, iHeight&,0,~GL_BGRA,~GL_UNSIGNED_BYTE,umcompressed#)
ogl("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MAG_FILTER, ~GL_LINEAR)
ogl("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MIN_FILTER, ~GL_LINEAR)
ogl("glBindTexture",~GL_TEXTURE_2D, 0)
FreeResource(res2&)
dispose umcompressed#
Retour txID&
ENDPROC
oGL("init",%hwnd,0,0,0,1)
oGL("glBlendFunc", ~GL_SRC_ALPHA, ~GL_ONE_MINUS_SRC_ALPHA)
oGL("glEnable", ~GL_BLEND)
oGL("blendmode", 2)
oGL("posmode", 1)
texture&= LoadPackedBGRA("LOGO",128,128)
whilenot iskey(27)
sleep 16
oGL("clear")
oGL("origin",0,0,-1)
oGL("texture",texture&,1)
ogl("Quad",0.5,0.5)
oGL("show")
endwhile
FreeDLL dll&
|
|
|
| |
|
|
|
H.Brill | chez mir fonctionne es sous X4. peut-être stimmt qui Pfad qui DLL pas. Überprüfe la fois, si dll& un gültiges Handle hat, alors <> 0. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 10.02.2023 ▲ |
|
|
|
|
Sven Bader | eh on, tu as droite. cela einzige, quoi je seulement pour den Forenbeitrag gemacht habe ist, une DLL statt einer Ressource aus qui EXE trop prendre, là scheint qui Ressource irgendwie défaut trop son.
avec suivant la ligne ca va maintenant aussi dans qui EXE, zumindest ab X3 $RES LOGO.res
qui Dossier erstelle je vorab avec dem Ressource Hacker. |
|
|
| |
|
|