Buenas!
Como podeis comprobar estoy escudriñando a tope la dxLib32 alias "Herramienta de los Dioses".
Pues eso, a ver si esta vez me explico bien :oops:
La cosa está en que con VB6 al crear un TIMER_CreateProcess(<handle>,<interval>,<AddresOff>) no había problema, en canvio con el VB.Net (Studio 2008) me dice que:
(AddressOf tmrDXRedraw) No se puede convertir la expresión a 'Integer' porque 'Integer' no es un tipo de delegación
Mas o menos, (lo he traducido del inglés). Como decía en VB6 no había problema, en cambio con el VB.Net me dice esto con todos los timers que creo. Hay que hacer algun tipo de conversión? O declarar alguna cosa antes? Pego aquí el código para ver que tal, en donde lo creo:
(Formulario Inicial) Inicialización de las Clases DX y creación del timer:
Public Function InicialitzarDX() As Boolean
Dim rzLocal As Boolean
M_Gfx = New dx_GFX_Class
m_System = New dx_System_Class
m_Input = New dx_Input_Class
rzLocal = M_Gfx.Init(PC.Handle, 890, 700, , True)
If rzLocal = False Then
MsgBox("Error tryng to initialize DXLib32" & AdsLanguage, MsgBoxStyle.Critical, "[frmMain].InicialitzarDX")
End
End If
PC.Top = 100
PC.Left = 12
m_Input.Init(Me.Handle)
' Crear Objecte Timer multi threath pel Redraw. Passi el que passi, s'anirà llençant un 'Redraw' cada x temps
TmrRedraw = m_System.TIMER_CreateProcess(Me.Handle, 10, AddressOf tmrDXRedraw)
Return True
End Function
(Módulo Público) Función que maneja el evento 'DXRedraw' para el Timer:
Public Sub tmrDXRedraw()
Call frmMain.DXRedraw()
End Sub
(Formulario Inicial) Sub en donde se hace el redraw:
Public Function DXRedraw()
If DXRedrawOn = False Then Exit Function
M_Gfx.Frame()
End Function
Pues eso, a ver que os parece. Gracias!!!!
Nota:
Os fijareis en que inicio la DX dentro de un PictureBox, es porque estoy haciendo un editor de mapas y me es mucho mas rápido utilizar los controles de la GDI de Windows (botones etc) que currarmelo todo. :lol:
Al pegar el código se me pasó una cosilla.
La variable tmrRedraw a la que asocío el Timer se llama igual que la Sub que tiene que ejecutarse el proceso. Lo he cambiado pero da el mismo resultado, sigue diciendo lo de "no se puede convertir..." ... :(
Lo primero es tener claro como funcionan los lenguajes administrados como Visual Basic .NET y como funcionan el resto de lenguajes no administrados como Visual Basic 6.0 o C++ por ejemplo. En .NET no se trabaja con la memoria real si no con espacios de memoria virtual que gestiona .NET. Estos espacios no se pueden apuntar a ellos con punteros convencionales, como los que devuelve la instruccion AddressOf en Visual Basic 6.0 (en Visual Basic .NET esta instruccion devuelve la referencia al espacio de memoria virtual del objeto). Las rutinas de cronometros de procesos de dx_lib32 estan implementadas directamente contra la API de Windows y estas trabajan con memoria real, por lo que no puedes pasar una referencia de codigo gestionado por .NET, un metodo Sub, a una rutina externa al espacio de memoria gestionado por .NET.
Resumiendo, no podras utilizar los cronometros de procesos de dx_lib32 en .NET, sin embargo si buscas encontraras como generar procesos ciclicos en .NET mediante la clase
Timer del espacio de nombres
System.Threading, que viene a ser lo mismo pero preparado para .NET.
A parte de esto, encontraras que la clase dx_System es casi en su totalidad perfectamente reimplementable en .NET, y en Visual Basic .NET mas facil aun gracias al atajo
My que te ofrece caminos mas cortos para tareas comunes en .NET como comprobar la existencia de archivos o listar archivos de un directorio y muchas mas que ofrece la clase dx_System en dx_lib32.
Cita de: "CocoMestah"Nota:
Os fijareis en que inicio la DX dentro de un PictureBox, es porque estoy haciendo un editor de mapas y me es mucho mas rápido utilizar los controles de la GDI de Windows (botones etc) que currarmelo todo. :lol:
Si estas haciendo un editor con las WinForms de .NET por que no te quitas de problemas y añades un simple control Timer?
Salu2...
Al final es lo que hice mientras no recibí respuesta, utilizo un timer del vbNet.
Igualmente aprecio la respuesta un montón. Gracias! :D