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 :
Mostrar la cita
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.
#2 Dario Salvi
18/01/2008 - 17:20 | Informe spam
RFOG escribió:
Mostrar la cita
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
#3 RFOG
18/01/2008 - 17:36 | Informe spam
Dario Salvi wrote :
Mostrar la cita
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.
#4 Dario Salvi
21/01/2008 - 11:47 | Informe spam
RFOG escribió:
Mostrar la cita
Pues si le paso un cualquier int debería funcionar, correcto?

Mostrar la cita
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
#5 RFOG
21/01/2008 - 19:26 | Informe spam
Dario Salvi presented the following explanation :
Mostrar la cita
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.

Mostrar la cita
Sasto.

Mostrar la cita
:-P

Mostrar la cita
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.
Ads by Google
Search Busqueda sugerida