Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema con dxlib32 (dx_system)

Iniciado por Surion, 27 de Enero de 2010, 08:22:08 PM

« anterior - próximo »

Surion

Hola a todos! Primero que nada me presento, me llamo Surion y estoy programando un servidor de Argentum Online.

Bien, el caso es el siguiente:

Hace unos dias recibi el codigo de un cliente / servidor para encargarme de el, he compilado el servidor de forma satisfactoria, ahora bien, he intentado compilar el cliente y sale el tipico error de "compile error, cant find project or librery" por lo cual me dirije a la ventana de "referencias", en este caso el fail MISSING tieene que ver con dx_lib32 para ser exacto me marca dx_system, he instalado el paquete dxlib actualizado de la web pero sigue sin funcionar, he instalado el paquete y seleccionado el mismo desde la opcion "explorar" pero el programa sigue sin compilar, tambien he probado registrando la libreria desde regsvr32 pero mas de lo mismo..

Aun estoy aprendiendo y estoy muy verde en esto, por ahora me he ido haciendo con la informacion necesaria para programar el servidor mirando paginas, pero no he encontrado practicamente nada mas relativo a este tema.

Edit: Cuelgo SS


¿Podria alguien ayudarme por favor?

PD: Al solucionar este tema tengo otra dudita sobre el empaquetado de graficos con estas librerias.

Muchas gracias de antemano.

[EX3]

Esa libreria es de las primeras versiones que saque hace 5 o 6 años, la serie 1.x, muy muy desfasda respecto a la versiones posteriores, la serie 2.1.x y la actual 2.2.x. Ahora las 5 clases van agrupadas en una misma dll, por lo que tienes que cambiar la referencia a la nueva libreria como se explica en la documentacion. Una vez solucionado esto, no deberias tener problemas con el codigo programado contra esa clase.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Surion

Es decir, deberia adaptar la desempaquetacion del .PAK a como indica la documentacion del paquete descargado con las librerias no?

[EX3]

En principio no tienes que adaptar nada de lo que tengas programado ya (y menos la parte de manejo de ficheros PAK que no ha variado segun recuerde) si no cambiar la referencia de la libreria que tiene tu proyecto por la que has instalado, todo desde esa ventana que muestras en la captura.

dx_lib32 a nivel de funciones de cara al programador ha variado poco durante sus versiones (practicamente todos los cambios han sido internos) y los cambios mas significativos los ha sufrido la clase grafica sobre todo, la de sonido y la de input. La de sistema y video practicamente estan igual desde las primeras versiones, por eso te decia que en tu caso, que solo estas programando contra dx_System, seguramente no tengas que tocar el codigo ya programado, de hecho al compilar lo sabras por que te dara error cualquier cosa que no este correcta :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Surion

Al "destildar" la libreria antigua que ponia MISSING y explorar system32 en busca de las nuevas librerias de dxlib32 vuelvo a compilar y me tira el siguiente error (He probado adaptando el code a las nuevas librerias y se compila bien, pero no consigo que el codigo funcione como quiero)

Compile error: User- defined type not defined

A ver si me podriais hechar una mano por favor, os dejo el code que estoy intentando compilar y su funcion:

'_________________________________________________________________
'
'dx_lib32: Ejemplo de lectura de un archivo PAK y extraccion de
'sus archivos.
'
'04 de junio de 2004 - José Miguel Sánchez Fernández
'
'Visita: http://www.dx_lib32.es.vg
'_________________________________________________________________
'
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const LB_FINDSTRING = &H18F

Dim List() As FilePacked            'Esta variable guarda el listado de archivos del paquete.
Dim Files As Long                   'Guarda el numero de archivos que hay en el paquete.
Dim Size As Long                    'Guarda el tamaño en KiloBytes del conjunto de archivos del paquete.
Dim Ret As Long                     'Guarda el valor devuelto por las funciones.
Dim PAK As String                   'Guarda la ruta de acceso al archivo paquete.

Dim m_System As dx_System_class     'Objeto que accede a dx_System.

Public Sub Form_Load()
On Error GoTo ErrOut

Set m_System = New dx_System_class

'Utilizamos la ventana de abrir archivo para buscar un paquete para su lectura:
'PAK = m_System.DLG_OpenFile(Me.hwnd, "Archivos PAK (*.pak)|*.pak|Todos los archivos (*.*)|*.*", "Abrir archivo PAK", App.Path)
'If PAK = vbNullString Then End

PAK = App.Path & "/Graficos.pak"

'Leemos el contenido del paquete:
Ret = m_System.PAK_Load(PAK, List(), Files, Size)

If Ret = 0 Or Ret = 2 Then GoTo ErrOut

'Mostramos el tamaño en memoria del paquete y el numero de archivos:
Label1.Caption = Files & " archivos en " & Int(Size / 1024 ^ 2) & " Mb (" & Size & " Kb)"

'Metemos los datos de la lista en el listbox:
For i = 0 To UBound(List)
    List1.AddItem List(i).FileName, i
    DoEvents
Next i

Exit Sub

ErrOut:
MsgBox "Error leyendo paquete.", vbCritical, Me.Caption
End
End Sub

'Extrae el archivo del paquete:
Public Sub Abrir_PAK(FileName As String)
On Error GoTo ErrOut
Dim Posicion As Integer

Posicion = SendMessage(List1.hwnd, LB_FINDSTRING, -1, FileName)
List1.Selected(Posicion) = True

'Obtenemos la ruta y nombre de acceso al archivo dentro del paquete:
FileName = List(List1.ListIndex).FileName

'Obtenemos solo el nombre del archivo:
FileName = Get_FileName(FileName)

FileName = App.Path & "/Graficos/" & FileName
'Utilizamos la ventana de guardar archivo para indicar donde extraemos el archivo:

'Extraemo al disco el archivo:
Ret = m_System.PAK_ExtractFile(PAK, List(List1.ListIndex), FileName)

If Ret = 0 Then GoTo ErrOut

Exit Sub

ErrOut:
MsgBox "Error extrayendo archivo.", vbCritical, Me.Caption
End Sub

'Extrae el nombre del archivo de la ruta de acceso del paquete:
Public Function Get_FileName(FileName As String) As String
   Dim i As Integer
   Dim j As Integer
   
   i = 0
   j = 0
   
   i = InStr(FileName, "/")
   Do While i <> 0
      j = i
      i = InStr(j + 1, FileName, "/")
   Loop
   
   If j = 0 Then
      Get_FileName = ""
   Else
      Get_FileName = Right$(FileName, Len(FileName) - j)
   End If
End Function

Public Sub List1_Click()
Command1.Enabled = True
End Sub



Con esto lo que quiero es hacer que mi cliente de Argentum Online me lea el paquete de graficos comprimidos y los cargue automaticamente en el juego, el resto del codigo que forma parte del juego esta correctamente configurado para que a la hora de cargar un grh lo cargue desde el sub  "Public Sub Abrir_PAK(FileName As String)".

Se que es mucho code y quizas sea un coñazo corregirlo pero llevo ya dias trabado en esto y realmente me fastidia no conseguir hacerlo funcionar y entenderlo sobre todo.

Muchas gracias por vuestra ayuda, estare esperando respuesta :)

Ahora que lo pienso, no seria mas facil conseguir la antigua version del dxlib32?? Si es asi... alguien que lo tenga seria tan amable de enviarmelo? Muchas gracias.

[EX3]

#5
Lo unico que no me cuadra en el codigo, y que concuerda con el error que indicas, es que defines el array List() como tipo Filepacked cuando deberia ser tipo PAK_FileInfo, que es la estructura que define dx_lib32 para esas funciones. Por lo demas, es practicamente el codigo tal cual del tutorial que hice para la antigua version. De hecho tienes un tutorial mas simplificado de como usar estas funciones en la nueva version de la libreria que has bajado, que junto a la documentacion pocas dudas deberia darte (son solo 3 funciones).

CitarAhora que lo pienso, no seria mas facil conseguir la antigua version del dxlib32?? Si es asi... alguien que lo tenga seria tan amable de enviarmelo?
Yo hace tiempo que no conservo nada de la serie de versiones 1.x de dx_lib32 si no de la actual 2.2.x. y todas las paginas enlazaban a esa descarga lo hacian a la antigua pagina de la libreria que ya no existe como tal (solo como historico de noticias). La antigua version tenia muchos errores y era algo inestable, a parte de que la actual esta mucho mas optimizada, completa y compacta (una dll en vez de 5), y lo mas importante, esta documentada. En serio, no es tanto el problema que tienes con lo del archivo PAK como para no poder utilizar la version actual (son las mismas funciones) y tampoco puedo dar soporte a las versiones antiguas de la libreria, solo a la actual, como es logico.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.