Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2010
GunMiNiHo GunMiNiHo is offline
Miembro
 
Registrado: feb 2009
Posts: 17
Poder: 0
GunMiNiHo Va por buen camino
punteros a funciones

hola tengo un problema, lo que intento hacer es obtener la address de un procedure de la memoria y despues restarla con otra y despues volver a restarle 5 y esa funcion me devuelva un DWORD como valor de retorno:

aca el codigo:

Código Delphi [-]
procedure creaItemFilter; stdcall;

var
      punteroProc: procedure(parametro: boolean; otro: string);

begin
punteroProc:=@ItemFilterASM;
PByte(ItemFilter)^:=$E9;
PDword(ItemFilter+1)^:=jmp($0050E851,punteroProc);
end;

Código Delphi [-]
function jmp(from,tooWORD): DWORD;
var
  jmpto:dword;
begin
  jmpto:=dword(from)-NativeInt(too)-5;
  Result := jmpto;
end;

Código Delphi [-]
procedure ItemFilterASM(parametro: boolean; otro: string);stdcall;

ahi estan las declaraciones me bota el siguiente error el compilador en el jmp($0050E851,punteroProc); el cual es el siguiente:
Cita:
not enough actual parameters
que parametro estoy olvidando??? o.o!!!
Responder Con Cita
  #2  
Antiguo 25-04-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Yo creo que es porque al hacer jmp($0050E851,punteroProc) el compilador cree que lo que querés hacer es llamar a puneroProc.

Lo que deberías hacer es jmp($0050E851,@punteroProc), con arroba.

Saludos.

PD: Como comentario, cuando postees código es una buena idea postear lo necesario para que compile sin mucho esfuerzo. Así te asegurás que la gente que quiera ayudarte, pueda hacerlo. Yo, por ejemplo, solamente puedo suponer lo que hace la función jmp, así que lo de usar "@" es una simple suposición. Podría andar o no.
Responder Con Cita
  #3  
Antiguo 27-04-2010
GunMiNiHo GunMiNiHo is offline
Miembro
 
Registrado: feb 2009
Posts: 17
Poder: 0
GunMiNiHo Va por buen camino
Cita:
Empezado por Lord Delfos Ver Mensaje
Yo creo que es porque al hacer jmp($0050E851,punteroProc) el compilador cree que lo que querés hacer es llamar a puneroProc.

Lo que deberías hacer es jmp($0050E851,@punteroProc), con arroba.

Saludos.

PD: Como comentario, cuando postees código es una buena idea postear lo necesario para que compile sin mucho esfuerzo. Así te asegurás que la gente que quiera ayudarte, pueda hacerlo. Yo, por ejemplo, solamente puedo suponer lo que hace la función jmp, así que lo de usar "@" es una simple suposición. Podría andar o no.
La funcion ItemFilterASM, es codigo en ASM y en eso no tengo errores al compilar pero aca te va la funcion entera:

Código Delphi [-]
procedure ItemFilterASM(parametro: boolean; otro: string);stdcall;

begin
asm
MOV DWORD PTR[CounterA],EAX
PUSH EBX
PUSH ESI
XOR EBX,EBX
MOVE ESI,[b] // ---> aki DWORD - String problem


@ifreject:
CMP EAX,[ESI]
JE @skip
CMP [ESI],EBX
JE @end
ADD ESI,$4
JMP @ifreject

@skip:
MOV EAX,$00

@end:
POP ESI
POP EBX
MOv DWORD PRT[EDI+$34],EAX
JMP [ItemFilterEnd]
end;
end;

horror numero 1: jmp(); me devuelve un Integer(DWORD), y @Variable me devuelve un tipo Pointer como hago para convertirlo!!!!!!!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
uso de punteros David OOP 19 14-12-2009 09:48:37
C++ y los punteros marcoszorrilla La Taberna 3 02-06-2008 18:31:11
Punteros Strings jlrbotella OOP 7 01-03-2007 17:46:39
Punteros davitcito Varios 2 25-04-2005 22:46:24
Punteros rafadrover OOP 8 18-09-2003 10:09:47


La franja horaria es GMT +2. Ahora son las 11:31:43.


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