Convertir un evento en un Handle de C++

18/01/2008 - 15:46 por Dario Salvi | Informe spam
Hola,

tengo el siguiente problema:

tengo una librera en C++ con un método que acepta en entrada un HANDLE
hEvent. Después de haber importado la función en .Net CF1 mapeandola
como importedMethod(IntPtr hLookup).

Ahora como puedo asignar un evento usando esta función ?
Supongo que tendría que pasar la instancia del delegate a importedMethod
convertiendola en un IntPtr o algo así.

Gracias,


Dario

Preguntas similare

Leer las respuestas

#1 RFOG
18/01/2008 - 16:25 | Informe spam
Dario Salvi expressed precisely :
Hola,

tengo el siguiente problema:

tengo una librera en C++ con un método que acepta en entrada un HANDLE
hEvent. Después de haber importado la función en .Net CF1 mapeandola como
importedMethod(IntPtr hLookup).

Ahora como puedo asignar un evento usando esta función ?
Supongo que tendría que pasar la instancia del delegate a importedMethod
convertiendola en un IntPtr o algo así.

Gracias,

Dario



No entiendo qué quieres hacer.

Una cosa es un evento (WaitForSingleObject, por ejemplo), que retorna
cuando otra parte del código dispara el evento en cuestión).

Otra cosa es un HANDLE genérico que puede representar a casi cualquier
cosa dentro del Kernel.

Y otra un callback; un delegado se puede convertir en un callback
nativo. Si es eso lo que quieres hacer, mira esto:
http://msdn2.microsoft.com/en-us/library/d186xcf0(VS.71).aspx


Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación

La vida es simplemente un mal cuarto de hora formado por momentos
exquisitos.
Respuesta Responder a este mensaje
#2 Dario Salvi
18/01/2008 - 17:20 | Informe spam
RFOG escribió:
Dario Salvi expressed precisely :
Y otra un callback; un delegado se puede convertir en un callback
nativo. Si es eso lo que quieres hacer, mira esto:
http://msdn2.microsoft.com/en-us/library/d186xcf0(VS.71).aspx



Te agradezco mucho por el link, es lo que necesito hacer.

Mi problema es que quiero asignar una callback a:
http://msdn2.microsoft.com/en-us/li...97897.aspx

desde el CF1.
Sabéis como convertir mi delegado en un IntPtr ?

Gracias.

Dario
Respuesta Responder a este mensaje
#3 RFOG
18/01/2008 - 17:36 | Informe spam
Dario Salvi wrote :
RFOG escribió:
Dario Salvi expressed precisely :
Y otra un callback; un delegado se puede convertir en un callback nativo.
Si es eso lo que quieres hacer, mira esto:
http://msdn2.microsoft.com/en-us/library/d186xcf0(VS.71).aspx



Te agradezco mucho por el link, es lo que necesito hacer.

Mi problema es que quiero asignar una callback a:
http://msdn2.microsoft.com/en-us/li...97897.aspx

desde el CF1.
Sabéis como convertir mi delegado en un IntPtr ?

Gracias.

Dario



Es que ahí no necesitas un delegado, necesitas un HANDLE que podría ser
un Int32 sin problemas...

Lo que hace la función es disparar el evento cuando se necesite un pin,
es decir, en C++ sería algo así:

Variable global:
HANDLE hEvent;

En un hilo (el principal, por ejemplo):
BthSetSecurityUI(hEvent,a,b);

En otro hilo que espera a que se produzca el evento:
WaitForSingleObject(hEvent,c);
<código que se ejutará cuando se precise un PIN>

Eso está pensado para no bloquear en exceso los hilos del programa. Tu
tienes un hilo que realiza una acción, pero esa acción depende de que
se produzcan o lleguen otras acciones en otros hilos, de manera que
llamas a BthSet... y en otro hilo haces el Wait... Mientras BthSet... o
el código asociado a ella no dispare el evento, la función Wait... está
sin retornar, de forma que ese hilo está "muerto" y sin usar nada de
procesador... hasta que retorne el Wait... ya sea por el timeout
especificado o porque se haya producido el evento.

Ahora bien, con la pérdida de contexto por el Interop quizás no te
sirva de nada.

Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación

La vida es simplemente un mal cuarto de hora formado por momentos
exquisitos.
Respuesta Responder a este mensaje
#4 Dario Salvi
21/01/2008 - 11:47 | Informe spam
RFOG escribió:
Dario Salvi wrote :
RFOG escribió:
Dario Salvi expressed precisely :
Y otra un callback; un delegado se puede convertir en un callback
nativo. Si es eso lo que quieres hacer, mira esto:
http://msdn2.microsoft.com/en-us/library/d186xcf0(VS.71).aspx



Te agradezco mucho por el link, es lo que necesito hacer.

Mi problema es que quiero asignar una callback a:
http://msdn2.microsoft.com/en-us/li...97897.aspx

desde el CF1.
Sabéis como convertir mi delegado en un IntPtr ?

Gracias.

Dario



Es que ahí no necesitas un delegado, necesitas un HANDLE que podría ser
un Int32 sin problemas...



Pues si le paso un cualquier int debería funcionar, correcto?

Lo que hace la función es disparar el evento cuando se necesite un pin,
es decir, en C++ sería algo así:




Vale ahora entiendo. Entonces ahora me tocará importar la
waitforsinglobject y llamarla con el mismo int, teniendo en cuenta que
la función es bloqueante.

Lo intentaré.
Muchas gracias !!!!

Dario
Respuesta Responder a este mensaje
#5 RFOG
21/01/2008 - 19:26 | Informe spam
Dario Salvi presented the following explanation :
RFOG escribió:
Dario Salvi wrote :
RFOG escribió:
Dario Salvi expressed precisely :
Y otra un callback; un delegado se puede convertir en un callback nativo.
Si es eso lo que quieres hacer, mira esto:
http://msdn2.microsoft.com/en-us/library/d186xcf0(VS.71).aspx



Te agradezco mucho por el link, es lo que necesito hacer.

Mi problema es que quiero asignar una callback a:
http://msdn2.microsoft.com/en-us/li...97897.aspx

desde el CF1.
Sabéis como convertir mi delegado en un IntPtr ?

Gracias.

Dario



Es que ahí no necesitas un delegado, necesitas un HANDLE que podría ser un
Int32 sin problemas...



Pues si le paso un cualquier int debería funcionar, correcto?




Yo creo que sí, pero tampoco lo tengo muy claro. Es que en el caso que
nos ocupa, lo que yo suelo hacer es una dll nativa y exponer un
interfaz a través de C++/CLI y listo.

Lo que hace la función es disparar el evento cuando se necesite un pin, es
decir, en C++ sería algo así:



Vale ahora entiendo. Entonces ahora me tocará importar la waitforsinglobject
y llamarla con el mismo int, teniendo en cuenta que la función es bloqueante.




Sasto.

Lo intentaré.
Muchas gracias !!!!



:-P


Dario



Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Mi blog sobre literatura: http://rfog.blogsome.com
Libros, ciencia ficción y programación

La vida es simplemente un mal cuarto de hora formado por momentos
exquisitos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida