elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [RESUELTO] Macro o ???
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [RESUELTO] Macro o ???  (Leído 2,973 veces)
Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
[RESUELTO] Macro o ???
« en: 7 Marzo 2014, 19:44 pm »

Hola gente, estoy tratando de lograr algo pero no puedo pensarlo en la manera que lo quiero, les explico un poco.
 
Tengo una variable WORD/DWORD.
 
Esa variable puede tomar muchos números, como:
#define defvar1 1
#define defvar2 2
#define defvar3 3
 
entonces, yo podría hacer un switch o un if para comparar si esa variable es defvar1,2 o 3 (tengo más defines, como 35), entonces me gustaría hacer con un macro supongo, para checkear éso, sin importar cuantos defines yo tenga.
 
Me gustaría ver como podrían resolverlo 1) usando macro o algo para evadir un switch grande o un if grande; 2)o la manera en que lo pensarían.
 
Gracias (Y)


« Última modificación: 10 Marzo 2014, 21:42 pm por Miseryk » En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [AYUDA] Macro o ???
« Respuesta #1 en: 7 Marzo 2014, 20:17 pm »

Sin saber qué uso va a tener ese valor es complicado darte una respuesta.


En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [AYUDA] Macro o ???
« Respuesta #2 en: 7 Marzo 2014, 20:39 pm »

Por ejemplo, sería un switch de 300 casos, el cual habrían 3 grupos de 100 c/u.

Con lo cual si el valor que pongo es igual a uno de los grupos, retornaría algún valor específico, como por ejemplo, si se encuentra en el 1er grupo retorna -32, si está en el 2do, 0, 3ro 40, y sí o sí tiene que estar en esos 300 casos. Osea que sí o sí va a retornar algo, -32, 0 o 40. Pero no quiero una función de 300 líneas, sinó que estaría bueno simplificarlo en un define u otra cosa rara que me lo simplifique, y teniendo en cuenta que en un futuro pueda agregar más casos a cada grupo o agregar nuevos grupos.
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [AYUDA] Macro o ???
« Respuesta #3 en: 7 Marzo 2014, 20:43 pm »

Si no es más que hacer una conversión puedes meter todos los valores en un vector y que el índice sean los valores del "define"

Código
  1. int conversor[MAX_DEFVAR];
  2. conversor[defvar1] = -32;
  3. conversor[defvar2] = -32;
  4. // ...
  5.  
  6. int indice = defvar2;
  7. int valor = conversor[indice];

Si el vector lo dejas estático solo tienes que construirlo una vez.
En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [AYUDA] Macro o ???
« Respuesta #4 en: 7 Marzo 2014, 20:59 pm »

Si no es más que hacer una conversión puedes meter todos los valores en un vector y que el índice sean los valores del "define"

Código
  1. int conversor[MAX_DEFVAR];
  2. conversor[defvar1] = -32;
  3. conversor[defvar2] = -32;
  4. // ...
  5.  
  6. int indice = defvar2;
  7. int valor = conversor[indice];

Si el vector lo dejas estático solo tienes que construirlo una vez.

Sí, pero los defvar pueden cambiar de valory tendría que ir a cada uno y poner el valor actual que correspando (raro caso pero posible), inclusive aunque no cambiaran los valores, tendría que hacer 300 líneas de éso :|
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [AYUDA] Macro o ???
« Respuesta #5 en: 7 Marzo 2014, 21:28 pm »

Sí, pero los defvar pueden cambiar de valory tendría que ir a cada uno y poner el valor actual que correspando (raro caso pero posible), inclusive aunque no cambiaran los valores, tendría que hacer 300 líneas de éso :|

si defvar1 está declarado como

Código
  1. #define defvar1 1

Ya te digo yo que defvar1 no va a cambiar su valor, al menos, hasta que no recompiles la aplicación.

Y tu eliges si crear un vector de 300 líneas... o un switch de 300 líneas. Si tienes 300 casos o buscas formas de optimizar ( por ejemplo agrupando por rangos de valores ) o tienes que poner todos los casos de forma explícita.
En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [AYUDA] Macro o ???
« Respuesta #6 en: 10 Marzo 2014, 21:42 pm »

Oh yeah, lo logré, pero, a mi manera:

Código
  1. #include <Windows.h>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. #define WFS_STAT_DEVONLINE                      (0)
  7. #define WFS_STAT_DEVOFFLINE                     (1)
  8. #define WFS_STAT_DEVPOWEROFF                    (2)
  9. #define WFS_STAT_DEVNODEVICE                    (3)
  10. #define WFS_STAT_DEVHWERROR                     (4)
  11. #define WFS_STAT_DEVUSERERROR                   (5)
  12. #define WFS_STAT_DEVBUSY                        (6)
  13. #define WFS_STAT_DEVFRAUDATTEMPT                (7)
  14. #define WFS_STAT_DEVPOTENTIALFRAUD              (8)
  15.  
  16. //0 4 8 12 16
  17. //0 1 3 5 7
  18. const int NUMBERS2[] = { -13, WFS_STAT_DEVOFFLINE, WFS_STAT_DEVNODEVICE, WFS_STAT_DEVUSERERROR, WFS_STAT_DEVFRAUDATTEMPT};
  19.  
  20. #define IS_INDEXABLE(arg) (sizeof(arg[0]))
  21. #define IS_ARRAY(arg) (IS_INDEXABLE(arg) && (((void *) &arg) == ((void *) arg)))
  22. #define ARRAYSIZE(arr) (IS_ARRAY(arr) ? (sizeof(arr) / sizeof(arr[0])) : 0)
  23.  
  24. int Calc(int Number, LPVOID x, DWORD vSize)
  25. {
  26. __asm
  27. {
  28. mov eax, Number
  29. mov ecx, vSize
  30. mov edi, x
  31. cld
  32. repne scasd ;aumenta EDI y lo compara con eax
  33. cmp [edi-0x4], eax
  34. jne salir
  35. mov eax, x
  36. mov eax, [eax]
  37. jmp salir2
  38. salir:
  39. xor eax,eax
  40. salir2:
  41. }
  42.  
  43. return;
  44. }
  45.  
  46. int _tmain(int argc, _TCHAR* argv[])
  47. {
  48. WORD fwDevice;
  49.  
  50. fwDevice = WFS_STAT_DEVNODEVICE;
  51.  
  52. cout << Calc((int)fwDevice, (LPVOID)&NUMBERS2, ARRAYSIZE(NUMBERS2)) << std::endl;
  53.  
  54. system("pause");
  55.  
  56. return 0;
  57. }
  58.  

Cambié mi define por "const int NUMBERS2[]", porque no podía obtener el address *-)

Pero, acá está la explicación:
 
tengo:
 
const int NUMBERS2[] = { -13, WFS_STAT_DEVOFFLINE, WFS_STAT_DEVNODEVICE, WFS_STAT_DEVUSERERROR, WFS_STAT_DEVFRAUDATTEMPT};
 
entonces, -13 va a ser el número que va a ser retornado, y los otros son los múltiples casos a comprar, lo sé, la cheatié (trucos)...
« Última modificación: 10 Marzo 2014, 21:46 pm por Miseryk » En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Macro en Vb
Programación Visual Basic
NaNo N´RoSeS 1 1,442 Último mensaje 15 Junio 2005, 00:50 am
por NaNo N´RoSeS
Macro para juego [ayuda]
Programación Visual Basic
berteuris 2 4,277 Último mensaje 7 Enero 2009, 01:45 am
por vivachapas
[Ayuda] Ejemplo de conexion y consulta a BD ORACLE desde VB o Macro de Excel
Programación Visual Basic
Graphixx 2 5,230 Último mensaje 14 Marzo 2013, 22:04 pm
por Graphixx
Ayuda con macro recoder
Programación General
metal89 0 1,441 Último mensaje 17 Marzo 2013, 23:45 pm
por metal89
Ayuda con Programa Macro Expert
Dudas Generales
yeison33 1 2,246 Último mensaje 10 Marzo 2019, 17:56 pm
por EdePC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines