Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Win32API Method Handler

Ver el tema anterior Ver el tema siguiente Ir abajo

Win32API Method Handler

Mensaje por Metalero el 2014-08-24, 17:57

Estoy haciendo unas cosas con Win32API (un player de video que "teoricamente" no deberia tener los tipicos problemas de codecs) y no encuentro informacion sobre como poder pasar como parametros un metodo de ruby, que luego la DLL sea capaz de llamar.

Como para que entiendan lo que quiero hacer, el player de video genera diferentes eventos (avanzo el tiempo, se pauso, llego al final del video, etc). Se que podria hacer un sistema de "polling" (llamar repetidamente a alguna otra funcion de la DLL para comprobar dichos estados), pero me parece una porqueria, y preferiria evitarlo.

Idealmente, deberia funcionar en todos los makers (con scripts). Intuyo que el metodo habria que pasarlo como "puntero":

Código:

[...]
    playVideo =  Win32API.new("VideoPlayer.dll", "PlayVideo", "ppp", "L")
    playVideo .call(hwnd, "Wildlife.wmv", onNewEvent)
[...]

def onNewEvent(event)
[...]
end


O algo por el estilo, el tema es que no tengo ni la menor idea de que le tengo que pasar exactamente, y que hacer despues desde C con ese puntero.

Si no se puede lo haré por poll.

_________________
avatar
Metalero
Administrador
Administrador



Créditos 1710

Gracias : 100

Volver arriba Ir abajo

Re: Win32API Method Handler

Mensaje por Wecoc el 2014-08-24, 22:14

Yo de ese tema no puedo informarte mucho, pero con lo de polling entiendo que te refieres a una dll en un proceso separado contínuo de comprobación (en éste caso, del estado del vídeo). Si así es, no es tan mala idea, pues ya se hizo algo muy similar para el sistema Always on top del RPG maker.

Aquí más info sobre eso:

DLL in Separate Process?
Prevent Window Deactivation

Sobre información más general del uso de la dll juntamente con Win32API está éste topic:
I made a DLL! Now what?

Y finalmente solo quería recordarte que el RPG maker en realidad tiene un uso ya interno de muestra de vídeos, quizá "reciclarlo" mediante dll para que en vez de mostrarse a parte lo hiciera como se desea sería una buena opción. <-- Si es una tontería lo que he dicho olvídalo xD

En fin, es un tema demasiado complicado para mí xD
avatar
Wecoc
Administrador
Administrador



Créditos 12208

Gracias : 632

Volver arriba Ir abajo

Re: Win32API Method Handler

Mensaje por Metalero el 2014-08-25, 00:46

No eso la verdad no me sirve, la dll que yo hice basicamente hace un puente entre el maker y las dlls del vlc. Y mientras dura el video, todo esta "vivo".

Lo que yo queria saber, es si se le puede pasar un metodo de ruby (o una instancia de clase entera) para hacer "callback" desde la dll hacia el maker. Pero me parece que tendria que involucrar librerias de ruby en la dll... y no vale la pena.

Por el momento lo deje hecho con Poll y funciona bien, en el peor de los casos siempre se puede hacer un poll "inteligente" para no estar preguntando a cada rato si el video termino, o cuanto lleva reproducido.

Ahora en un rato abro otro tema y subo lo que tengo. Igualmente dejo este tema abierto ya que si alguien sabe como hacer lo del callback, seria muy util no solo para esto que estoy haciendo yo si no para otras cosas que puedan hacer otras personas.

_________________
avatar
Metalero
Administrador
Administrador



Créditos 1710

Gracias : 100

Volver arriba Ir abajo

Re: Win32API Method Handler

Mensaje por newold el 2014-08-25, 16:19

que yo sepa no puedes llamar a un método de ruby desde c. podrías hacer un loop en ruby que chequeara la existencia de una archivo para ejecutar algún método, y que este archivo fuera creado por la dll si se da x condición (si te pasas por mi post del maker plataformas 2d, link, en el video del editor, cuando le doy a seleccionar imágenes, se llama a un formulario de visual basic con el código para seleccionar imágenes, y el programa entra en un loop esperando un archivo que crea el formulario al cerrarlo/seleccionar imágenes con alguna información. Cuando este archivo es creado, el loop se termina y carga el archivo con la información que sea y actua en consecuencia. Es lo más parecido a un callback que he podido crear entre ruby/c)
avatar
newold
Principiante
Principiante

0/3

Créditos 1232

Gracias : 119

Volver arriba Ir abajo

Re: Win32API Method Handler

Mensaje por Metalero el 2014-08-25, 18:43

Escribir en un archivo debe ser la opcion mas lenta (el Disco rigido es el dispositivo mas lento en la computadora). La unica ventaja es que este metodo es extremadamente versatil, y se puede utilizar casi en cualquier situacion (donde la velocidad no sea prioridad).

Lo que hice fue usar "polling" a las funciones de la DLL, y así el maker le "Pega" repetidamente para conocer el estado requerido.

La otra opcion que se me ocurre (pero no se si puede, ni por donde empezar a mirar), es intentar utilizar algun tipo de "pipe" entre procesos... pero en Windows este metodo no es muy facil de usar.

Estuve investigando el tema de hacer un callback desde la dll a ruby, y solo encontré gente que lo hace a traves de la libreria de ruby, pero esto implica mas configuracion y sobrecarga en la dll, ademas supongo que habria que "compartir" el contexto de ruby... en fin: un lio.

Gracias igual por afirmar que tampoco conoces ningun modo "simple" para hacer un callback C -> Ruby

_________________
avatar
Metalero
Administrador
Administrador



Créditos 1710

Gracias : 100

Volver arriba Ir abajo

Re: Win32API Method Handler

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.