Autor
|
Tema: [RESUELTO] Macro o ??? (Leído 3,298 veces)
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
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
Mensajes: 1.248
|
Sin saber qué uso va a tener ese valor es complicado darte una respuesta.
|
|
|
En línea
|
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
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
Mensajes: 1.248
|
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" int conversor[MAX_DEFVAR]; conversor[defvar1] = -32; conversor[defvar2] = -32; // ... int indice = defvar2; int valor = conversor[indice];
Si el vector lo dejas estático solo tienes que construirlo una vez.
|
|
|
En línea
|
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
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" int conversor[MAX_DEFVAR]; conversor[defvar1] = -32; conversor[defvar2] = -32; // ... int indice = defvar2; 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
Mensajes: 1.248
|
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 #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
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
Oh yeah, lo logré, pero, a mi manera: #include <Windows.h> #include <iostream> using namespace std; #define WFS_STAT_DEVONLINE (0) #define WFS_STAT_DEVOFFLINE (1) #define WFS_STAT_DEVPOWEROFF (2) #define WFS_STAT_DEVNODEVICE (3) #define WFS_STAT_DEVHWERROR (4) #define WFS_STAT_DEVUSERERROR (5) #define WFS_STAT_DEVBUSY (6) #define WFS_STAT_DEVFRAUDATTEMPT (7) #define WFS_STAT_DEVPOTENTIALFRAUD (8) //0 4 8 12 16 //0 1 3 5 7 const int NUMBERS2[] = { -13, WFS_STAT_DEVOFFLINE, WFS_STAT_DEVNODEVICE, WFS_STAT_DEVUSERERROR, WFS_STAT_DEVFRAUDATTEMPT}; #define IS_INDEXABLE(arg) (sizeof(arg[0])) #define IS_ARRAY(arg) (IS_INDEXABLE(arg) && (((void *) &arg) == ((void *) arg))) #define ARRAYSIZE(arr) (IS_ARRAY(arr) ? (sizeof(arr) / sizeof(arr[0])) : 0) int Calc(int Number, LPVOID x, DWORD vSize) { __asm { mov eax, Number mov ecx, vSize mov edi, x cld repne scasd ;aumenta EDI y lo compara con eax cmp [edi-0x4], eax jne salir mov eax, x mov eax, [eax] jmp salir2 salir: xor eax,eax salir2: } return; } int _tmain(int argc, _TCHAR* argv[]) { WORD fwDevice; fwDevice = WFS_STAT_DEVNODEVICE; cout << Calc((int)fwDevice, (LPVOID)&NUMBERS2, ARRAYSIZE(NUMBERS2)) << std::endl; system("pause"); return 0; }
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!!!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Macro en Vb
Programación Visual Basic
|
NaNo N´RoSeS
|
1
|
1,564
|
15 Junio 2005, 00:50 am
por NaNo N´RoSeS
|
|
|
Macro para juego [ayuda]
Programación Visual Basic
|
berteuris
|
2
|
4,407
|
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,471
|
14 Marzo 2013, 22:04 pm
por Graphixx
|
|
|
Ayuda con macro recoder
Programación General
|
metal89
|
0
|
1,596
|
17 Marzo 2013, 23:45 pm
por metal89
|
|
|
Ayuda con Programa Macro Expert
Dudas Generales
|
yeison33
|
1
|
2,547
|
10 Marzo 2019, 17:56 pm
por EdePC
|
|