No se puede enviar información de dll a exe con WM_COPYDATA

Estoy intentando enviar un registro de una dll a un exe.

El dll es un complemento de Outlook que escribí, el exe es mi aplicación principal.

Utilicé este ejemplo para enviar con éxito un registro de exe a exe, pero cuando intento hacer lo mismo de dll a exe no funciona.

Nota: por favor abra el enlace y allí encontrará el código que estoy usando. Ese código es para una aplicación de remitente EXE y una aplicación de remitente EXE. Esto funciona.

Si pongo el código del remitente dentro de una dll, el ejemplo ya no funciona.

¿Podrías sugerir una solución?

2
Un registro, actualicé la pregunta.
agregado el autor LaBracca, fuente
Desde que escribí la pregunta, no tengo muchos detalles pero está claro: puse un enlace al ejemplo que usé para que pueda encontrar el código que uso. Ese ejemplo es un EXE a EXE. Acabo de hacer DLL a EXE y no puedo enviar los mensajes. Debido a que la única diferencia entre el ejemplo original y lo que hice es que de EXE a EXE se cambió a DLL a EXE, esto podría provocar que algunos de ustedes la idea de la solución. Es por esto que mi pregunta fue escrita intencionalmente de esta manera.
agregado el autor LaBracca, fuente
-1. ¿Qué significa "no funciona"?
agregado el autor Rob Kennedy, fuente
¿No puedes enviar los mensajes? ¿Quiere decir que SendMessage falla? Si falla, debe devolver un código de error. ¿Has comprobado eso? ¿Estás seguro de que has encontrado el manejador de ventana correcto? ¿Ha revisado su código con el depurador y, en cada paso, cada cálculo y llamada de función ha dado exactamente el valor que sabía de antemano que produciría? Hasta que no lo hayas hecho, no has terminado de trabajar en este problema. ¿Qué esperabas que sucediera y qué sucedió en su lugar?
agregado el autor Rob Kennedy, fuente
Publicar el código que no funciona. La declaración de registro es NO ayuda.
agregado el autor Warren P, fuente
¿Qué es un TRecord ?
agregado el autor Andreas Rejbrand, fuente
Debe mostrar el código que envía el WM_COPYDATA y el código que lo recibe. También debe explicar qué significa "no funciona".
agregado el autor David Heffernan, fuente
Empezaría con una simple cuerda. Si no puede enviar '¡Hola, mundo!', Cualquier discusión sobre el registro es irrelevante.
agregado el autor Chris Thornton, fuente

1 Respuestas

Suponiendo que puede hacer que funcione con una cadena (que aún está por verse), simplemente podría serializar su registro a una cadena (CSV, posiblemente utilizando un delimitador extraño como ~), enviar como una cadena (PAnsiChar o PWideChar), luego De-serialze de nuevo en el registro en el otro extremo. Esto no es tan elegante como lo que quieres, pero absolutamente, positivamente, funcionará.

0
agregado
Gracias por la respuesta, pero mi problema no es enviar los datos, es por eso que no funciona desde un archivo DLL, mientras que desde un archivo ejecutable funciona.
agregado el autor LaBracca, fuente
El registro también es bastante fácil, con cadena [n] . Solo necesita usar SizeOf() y todo debería estar bien.
agregado el autor David Heffernan, fuente