Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mandar Datos a Traves de WM (https://www.clubdelphi.com/foros/showthread.php?t=97161)

_Io 12-01-2025 10:00:04

Mandar Datos a Traves de WM
 
Buenos días.

Estoy intentando mandar información a través de los mensajes de windows. Con un tipo de dato funciona y con otro no.
Os dejo el código.

Este funciona:

Cita:


Código:



function get_Qry_Result_From_wm (aParam :integer):RespuestaConsultaFactuSistemaFacturacionType;
begin

  result:=RespuestaConsultaFactuSistemaFacturacionType(pointer(aParam)^);
  Dispose(pointer(aParam));

end;


function send_Qry_Result_by_wm (aQry :RespuestaConsultaFactuSistemaFacturacionType):integer;
var
  pQry :^RespuestaConsultaFactuSistemaFacturacionType;
begin

  new(pQry);
  pQry^:=aQry;
  result:=integer(pQry)

end;

La primera función recoge el valor de uno de los parámetro de un WM (por ejemplo WParam), en el que se ha dejado la dirección de memoria de la información a enviar.

La segunda función, crea un nuevo objeto y devuelve su dirección de memoria como integer, el cual se utlizará para enviarlo a través de un WM.

Este NO funciona:

Cita:

Código:


function get_Resp_RFs_From_wm (aParam :integer):RespuestaRegFactuSistemaFacturacionType;
begin

  result:=RespuestaRegFactuSistemaFacturacionType(pointer(aParam)^);
  Dispose(pointer(aParam));

end;

function send_Resp_RFs_by_wm (aRF :RespuestaRegFactuSistemaFacturacionType):integer;        // Prepara la respuesta de la AEAT para
var
  pRF :^RespuestaRegFactuSistemaFacturacionType;
begin

  new(pRF);
  pRF^:=aRF;
  result:=integer(aRF)

end;

Da el error de access violation at 0x00....

Si alguien sabe la solución para esto u otra forma de hacerlo, se lo agradecería.

Muchas Gracias.

Toñico 12-01-2025 23:07:53

Desde el desconocimiento mas absoluto de como funciona, he visto que la segunda función es un poco distinta a la primera. Puede que sea sólo un error tipográfico, pero te escribo como creo que tendría que ser.:

Código Delphi [-]
function send_Resp_RFs_by_wm (aRF :RespuestaRegFactuSistemaFacturacionType):integer;         // Prepara la respuesta de la AEAT para
var
  pRF :^RespuestaRegFactuSistemaFacturacionType;
begin

  new(pRF);
  pRF^:=aRF;
  result:=integer(pRF)

end;

_Io 13-01-2025 18:41:50

Cita:

Empezado por Toñico (Mensaje 561134)
Desde el desconocimiento mas absoluto de como funciona, he visto que la segunda función es un poco distinta a la primera. Puede que sea sólo un error tipográfico, pero te escribo como creo que tendría que ser.:

Código Delphi [-]
function send_Resp_RFs_by_wm (aRF :RespuestaRegFactuSistemaFacturacionType):integer;         // Prepara la respuesta de la AEAT para
var
  pRF :^RespuestaRegFactuSistemaFacturacionType;
begin

  new(pRF);
  pRF^:=aRF;
  result:=integer(pRF)

end;

Buenas Tardes.

Tienes toda la razón.

Cuantas veces he mirado el código y no he sido capaz de ver el erro.

MUchisimas Gracias.


La franja horaria es GMT +2. Ahora son las 13:41:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi