![]() |
| |||||||
| Registrarse | Preguntas Frecuentes | Lista de Foreros | Calendario | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
| | LinkBack | Herramientas | Desplegado |
| |||
| Buenas, a ver si alguien puede echarme una mano con un problema q m trae de cabeza... Estoy desarrollando una aplicacion en modo consola y necesito que reciba mensajes de una DLL. - En la DLL envío los mensajes del siguiente modo: PostMessage(HWND_BROADCAST, CM_MI_MENSAJE, wParam, lParam); - previamente he registrado el mensaje (tanto en la aplicacion de consola como en la DLL). Lo he hecho asi: CM_MI_MENSAJE:=RegisterWindowMessage(pchar('MiMens aje')); - En la aplicacion de consola, para que pueda recibir mensajes, he creado un HWND (para que windows le permita recibir mensajes). Lo he creado asi: winhandle:=AllocateHWND(WndProc); - Y en la aplicacion de consola, tengo un bucle que se dedica a leer los mensajes que le lleguen, del siguiente modo: repeat if PeekMessage(msg, winhandle, 0, 0, PM_REMOVE) then begin writeln(inttostr(msg.message)); end; sleep(20); // esto es para que el uso de CPU no se me dispare al 100% until salir; - En principio parece que todo me funciona bien, pero a veces (no siempre), estando la consola en 2º plano, el valor de msg.message devuelto por PeekMessage es 0 (en vez de CM_MI_MENSAJE). Si entonces pongo la aplicacion en 1er plano, vuelve a dar valores correctos (y vuelve a dar 0 si la pongo en 2º plano). Los valores de lParam y wParam son siempre correctos. ¿A que puede ser debido esto? ¿A alguien le ha pasado alguna vez? No se si alguien podra echarme una mano con esto, pero ya no se k hacer. Le he dado mil vueltas al codigo, incluso lo he reescrito de nuevo y sigue igual. Un saludo!! |
| | ||||
| ||||
| |
| |||
| Creo q ya se donde esta el error pero eso m plantea otra cuestion. imaginemos la siguiente DLL: library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; begin end. Si en una aplicacion cargo la DLL y llamo a "proc1" me guardará en valor 1 en "num" y mostrará una ventana de texto con el numero 1. si despues de eso llamo a "proc2" debería mostrar una ventana de texto que también tenga el numero 1. ¿verdad? Pues NO. Resulta que si la aplicacion no esta en primer plano, el numero que muestra es 0. ¿¿¿¿¿¿¿PORQUE??????? no lo entiendo |
| |||
| Creo q ya se donde esta el error pero eso m plantea otra cuestion. imaginemos la siguiente DLL: library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; begin end. Si en una aplicacion cargo la DLL y llamo a "proc1" me guardará en valor 1 en "num" y mostrará una ventana de texto con el numero 1. si despues de eso llamo a "proc2" debería mostrar una ventana de texto que también tenga el numero 1. ¿verdad? Pues NO. Resulta que si la aplicacion no esta en primer plano, el numero que muestra es 0. ¿¿¿¿¿¿¿PORQUE??????? no lo entiendo |
| |||
| Creo q ya se donde esta el error pero eso m plantea otra cuestion. imaginemos la siguiente DLL: library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; begin end. Si en una aplicacion cargo la DLL y llamo a "proc1" me guardará en valor 1 en "num" y mostrará una ventana de texto con el numero 1. si despues de eso llamo a "proc2" debería mostrar una ventana de texto que también tenga el numero 1. ¿verdad? Pues NO. Resulta que si la aplicacion no esta en primer plano, el numero que muestra es 0. ¿¿¿¿¿¿¿PORQUE??????? no lo entiendo |
| |||
| Creo q ya se donde esta el error pero eso m plantea otra cuestion. imaginemos la siguiente DLL: library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; begin end. Si en una aplicacion cargo la DLL y llamo a "proc1" me guardará en valor 1 en "num" y mostrará una ventana de texto con el numero 1. si despues de eso llamo a "proc2" debería mostrar una ventana de texto que también tenga el numero 1. ¿verdad? Pues NO. Resulta que si la aplicacion no esta en primer plano, el numero que muestra es 0. ¿¿¿¿¿¿¿PORQUE??????? no lo entiendo |
| |||
| Creo q ya se donde esta el error pero eso m plantea otra cuestion. imaginemos la siguiente DLL: library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; begin end. Si en una aplicacion cargo la DLL y llamo a "proc1" me guardará en valor 1 en "num" y mostrará una ventana de texto con el numero 1. si despues de eso llamo a "proc2" debería mostrar una ventana de texto que también tenga el numero 1. ¿verdad? Pues NO. Resulta que si la aplicacion no esta en primer plano, el numero que muestra es 0. ¿¿¿¿¿¿¿PORQUE??????? no lo entiendo |
| |||
| Creo q ya se donde esta el error pero eso m plantea otra cuestion. imaginemos la siguiente DLL: library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; begin end. Si en una aplicacion cargo la DLL y llamo a "proc1" me guardará en valor 1 en "num" y mostrará una ventana de texto con el numero 1. si despues de eso llamo a "proc2" debería mostrar una ventana de texto que también tenga el numero 1. ¿verdad? Pues NO. Resulta que si la aplicacion no esta en primer plano, el numero que muestra es 0. ¿¿¿¿¿¿¿PORQUE??????? no lo entiendo |
| |||
| Creo q ya se donde esta el error pero eso m plantea otra cuestion. imaginemos la siguiente DLL: library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; begin end. Si en una aplicacion cargo la DLL y llamo a "proc1" me guardará en valor 1 en "num" y mostrará una ventana de texto con el numero 1. si despues de eso llamo a "proc2" debería mostrar una ventana de texto que también tenga el numero 1. ¿verdad? Pues NO. Resulta que si la aplicacion no esta en primer plano, el numero que muestra es 0. ¿¿¿¿¿¿¿PORQUE??????? no lo entiendo |
| |||
| CORRECCION DEL CODIGO DEL MENSAJE ANTERIOR :P SORRY (el problema sigue siendo el mismo) library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; procedure proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc1, proc2; begin end. |
| |
| |
| |||
| CORRECCION DEL CODIGO DEL MENSAJE ANTERIOR :P SORRY (el problema sigue siendo el mismo) library midll; uses windows, sysutils; var num: integer; procedure proc1; begin num:=1; messagebox(0, pchar(inttostr(num)), '', 0); end; procedure proc2; begin messagebox(0, pchar(inttostr(num)), '', 0); end; exports proc1, proc2; begin end. |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Problema al enviar mensajes | jose | Newsgroup microsoft.public.es.outlookexpress | 15 | 06-03-2008 20:53:04 |
| Problema con los mensajes enviados | Diego Navarro | Newsgroup microsoft.public.es.outlook | 2 | 12-12-2007 12:44:31 |
| Problema al recibir mensajes. | Luis | Newsgroup microsoft.public.es.outlookexpress | 0 | 09-04-2007 20:02:03 |
| Problema para ver Mensajes desde OWA | Gonzalo Vallejos | Newsgroup microsoft.public.es.espanol.soporte.entre.usuarios.exchange | 0 | 08-11-2005 14:12:20 |
| Problema Mensajes | zitro | Newsgroup microsoft.public.es.office97 | 0 | 21-11-2003 08:26:01 |