Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema con TIMER_CreateProcess y VB.NET

Iniciado por CocoMestah, 18 de Febrero de 2008, 01:04:02 PM

« anterior - próximo »

CocoMestah

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:

CocoMestah

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..." ...  :(

[EX3]

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...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

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

CocoMestah

Al final es lo que hice mientras no recibí respuesta, utilizo un timer del vbNet.
Igualmente aprecio la respuesta un montón. Gracias!  :D






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.