| |
|
|
Sven Bader | ¡Hola zusammen,
folgendes Thema schiebe Yo ya una Weile antes me hier, porque lo zwar en keiner Profano Versión de 10 a X4 funktioniert aber muy wohl en Profano2CPP.
Ziel es, Ressourcen de el laufenden Programa oder uno DLL a invitar, welche aber gepackt son y mittels RtlDecompressBuffer entpackt voluntad necesario. Dies debería alles se passieren, sin una Expediente zwischenzuspeichern.
Das Problema es, dass FindResource/LoadResource una Speicheradresse zurückgibt, welche Yo en un Logint speichere y así no weiterarbeiten kann.
Das simpelste Ejemplo, wo lo en XProfan ya knallt es: umcompressedSize& = Largo(res2&,0)
In RtlDecompressBuffer entonces 2x para res1& y res2&, XProfan hätte hier wohl gerne incluso dimensionierte Bereiche en Form de res1# y res2#.
Nochmal: en Profano2Cpp se ejecuta el Code, el Werte (no el Adresse!) el Integers voluntad hier korrekt como Speicheradresse erkannt.
Hilft me hier una weitere Zuweisung, una copymemory, una Typenkonvertierung?
Hier el Code y anbei el Ver código fuente + el Resourcen-DLL para testen.
$H opengl.ph
declarar 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
parámetros Typ$,Name$
ENDPROC
Proc LoadPackedBGRA
Parámetros name$,iWidth&,iHeight&
Declarar umcompressedSize&,umcompressed#,typ$,res1&,res2&,bworkspaacesize&
typ$ ="PACKED"
OpenResource("PACKED", name$)
res1& = FindResource(dll&, addr(name$), addr(typ$))
res2& = LoadResource(dll&, res1&)
LockResource(res2&)
umcompressedSize& = Largo(res2&,0)'<- hier knallt lo para 1. Tiempo, una Lonint con Speicheradresse se hier no korrekt verarbeitet
'Den podría uno auch todavía berechnen
'umcompressedSize& = (iWidth& * iHeight& * 4)
dim umcompressed#, umcompressedSize&
'Gescheiteter Intento, lo a retten
'declarar res2#,res1#
'res2# = res2&
'res1# = res1&
'dim res1#, 100'???
'dim res2#, umcompressedSize&
'RtlDecompressBuffer(2,umcompressed#,umcompressedSize&,res2#+4,SizeofResource(%hInstance, res1#)-4,Addr(bworkspacesize&))
'Hier knallt lo vermutlich doppelt en res1& y res&, como hier otra vez Speicheradressen en un Longint posición
RtlDecompressBuffer(2,umcompressed#,umcompressedSize&,res2&+4,SizeofResource(dll&, res1&)-4,Addr(bworkspacesize&))
'en USHORT CompressionFormat
'out PUCHAR UncompressedBuffer
'en ULONG UncompressedBufferSize
'en PUCHAR CompressedBuffer <- una loning Variable
'en ULONG CompressedBufferSize
'out PULONG FinalUncompressedSize
declarar 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&)
disponer umcompressed#
Volver 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 | En me se ejecuta lo bajo X4. Tal vez stimmt el Pfad el DLL no. Überprüfe veces, si dll& una gültiges Handle ha, also <> 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 | Oh uno, du hast bastante. Das einzige, Yo sólo para el Forenbeitrag gemacht habe es, una DLL en lugar de uno Ressource de el EXE a nehmen, hay scheint el Ressource irgendwie defekt a ser.
Mit folgender Línea es ahora en el EXE, zumindest de X3 $RES LOGO.res
El Expediente erstelle Yo vorab con el Ressource Hacker. |
|
|
| |
|
|