Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Errores Incomprensibles!

Iniciado por [EX3], 15 de Septiembre de 2003, 06:28:26 PM

« anterior - próximo »

[EX3]

 Nas, keria comentar un suceso algo extraño y dificil de comprender para mi.

Situacion: Tengo una funcion dentro de una dll para cargar texturas en Direct Graphics. La llamaremos Cargo_Textura()
Tengo 2 programas que usan la funcion.

Programa A: (Pseudocodigo)
Sub Main()
Inicializo_dll()
Cargo_Textura() //Codigo responsable del error.
Bucle_Render()
End Sub


Programa B: (Pseudocodigo)
Sub Cargo_Textura_Desde_Fuera()
Cargo_Textura() //Codigo responsable del error.
End Sub

Sub Main()
Inicializo_dll()
Cargo_Textura_Desde_Fuera()
Bucle_Render()
End Sub


Bien, el Programa A, al ejecutarlo, salta con un error de "Este programa ha ejecutado una instruccion no valida..." (Tipico mensaje de error de windows (grrr) ) mientras que el Programa B, se ejecuta sin ningun problema!!!. No entiendo que diferencia hay en llamar a la funcion desde el Sub Main() diectamente a llamarla desde el Sub Main() a traves de un procedimiento externo, sinceramente, es algo ke no "computo", no entra en mi logica. Alguien puede aclararme esto, por favor  :blink: ???

Gracias.

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

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

nostromo

 Si ambos estan compilados con las mismas opciones puede ser un problema con algun puntero que trate con la pila, es decir con alguna variable local de una funcion. Estas variables locales son las que más cambian al añadir nuevas funciones.

En fin, vigila las variables locales y los punteros. Es una idea.

Un saludo
Nostromo

DraKKaR

 Usas VB con DirectX? no decían que eso no era buena idea por aquí?

Zaelsius

 Has probado a depurarlo? Yo me acuerdo que depurar VB era un poco  (grrr)  , incluso me pareció encontrar verdaderos bugs. Más o menos deberias saber dónde falla(no el el código anterior, sino dentro de tu motor/librerias).. no puedes ponernos 10 lineas de código como las de arriba y decir que simplemente no funciona.

Otra razón más para dejar VB en lo que a programación gráfica respecta.  :P  

[EX3]

 Extracto de codigo de dx_gfx.dll de dx_lib32:
'Carga un grafico en memoria:
Public Function MAP_Load(FPG As Long, Map As Long, FileName As String, Optional ColorKey As Long) As Long
On Error GoTo ErrOut

Dim SrcData As D3DXIMAGE_INFO

If ColorKey = 0 Then ColorKey = RGBA(0, 0, 0, 255)

'Cargamos la textura en memoria:
Set Graph(FPG, Map).Texture = D3DX.CreateTextureFromFileEx(Device, FileName, D3DX_DEFAULT, D3DX_DEFAULT, _
                       D3DX_DEFAULT, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_FILTER_TRIANGLE Or D3DX_FILTER_MIRROR, _
                       D3DX_FILTER_TRIANGLE Or D3DX_FILTER_MIRROR, ColorKey, SrcData, ByVal 0)

'Guardamos la informacion de la textura:
Graph(FPG, Map).Height = SrcData.Height
Graph(FPG, Map).Width = SrcData.Width
Graph(FPG, Map).ColorKey = ColorKey
Graph(FPG, Map).Flag = True 'Indica que la textura esta activa.

MAP_Load = 1
Exit Function

ErrOut:
End Function

Si realmente existe el fallo deberia estar, como tu bien has dicho, en la libreria. Pero repito, por ke el Programa A falla y el Programa B no? A mi eso de ke la razon sea VB simplemente no me cuadra y si hubiera un fallo en codigo, en principio, deberia ser interceptable, y afectaria tanto a  la sintaxis del Programa A como el B digo yo, no?

En principio no es un bug ke me preocupe demasiado ya ke cualquier programa complicado ke se realize seguramente acabe llamando a la funcion desde un procedimiento del programa estilo Cargo_Textura_Desde_Fuera().

Por cierto, por si sirve de algo, el error lo da Kernel32.dll:


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

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

ethernet

 Yo me apunto a lo que dice nostromo, al añadir mas datos en la pila al escribir sobre ellos no causa problemas, aunque si hiciera eso el programa no retornaria a la funcion que le llamo. De todas formas la unica variable que puede dar problemas ahi es SrcData y mirando la msdn no parece que haya error.


saludos

Haddd

 Yo tuve un problema de este estilo en C++. Usaba una variable que "misteriosamente" perdía su contenido a veces. Era un bug del compilador, pq al aplicar el parche se resolvió.

Quizás estés ante un bug. Cuando encuentras un bug, hazlo de otra manera!

[EX3]

 Osea, ke por lo ke parece el bug lo puede provocar la variable SrcData, a ver si me saco algo mas de tiempo y lo miro (aunque aun asi sigue sin encajarme ke A falle y B funcione, siento ser tan cabezota  (nooo) ) Ademas, me interesa ke la gente lo pruebe, ke tb tengo experiencia en ke fallos asi salgan o bien en plataformas 9x (98/Me) o bien NT (NT/2000/Xp) y no en las dos ke seria lo logico desde cierto punto de vista, pero weno, ke puedo esperar, es Windows!!!  (uoh) A ver si termino la documentacion del proyecto y lo subo a la red para ke la gente trastee un poco con el (y por ke no, para ke le echeis un vistacillo  :P )

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.