• Viernes 8 de Noviembre de 2024, 17:32

Autor Tema:  Reutilizacion de codigo  (Leído 2793 veces)

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Reutilizacion de codigo
« en: Sábado 16 de Mayo de 2009, 17:13 »
0
El tema es asi:

1)Estoy tratando de reutilizar codigo de una aplicacion a otra, la nueva aplicacion es una DLL dinamica.

2)Creo un "RIV_Varios.h"

Código: C++
  1. #ifndef __RIV_Varios_H__
  2. #define __RIV_Varios_H__
  3.  
  4. //#include "stdafx.h"
  5.  
  6. class CRIV_Varios //: public CDialog
  7. {
  8.  
  9. private:
  10.    
  11.     // Construction
  12. public:
  13.     int Byte_2_Hex(char Byte_Entrada, char *Char_Salida);
  14.  
  15.     unsigned int read_16u(FILE *fp);
  16.     unsigned long read_32u(FILE *fp);
  17.  
  18.  
  19.     // Implementation
  20. protected:
  21.  
  22. };
  23.  
  24. #endif
  25.  

3)Creo un "RIV_Varios.Cpp"

Código: C++
  1. #include "RIV_Varios.h"
  2.  
  3. //////////////////////////////////
  4. unsigned long CRIV_Varios::read_32u(FILE *fp)
  5.     {
  6.         unsigned char b0,b1,b2,b3; // bytes from file
  7.         b0 = getc(fp);
  8.         b1 = getc(fp);
  9.         b2 = getc(fp);
  10.         b3 = getc(fp);
  11.         return (unsigned long)((((((b3<<8)|b2)<<8)|b1)<<8)|b0);
  12.     }
  13. // Similarly for writing to file
  14. // Other routines need to be written for 16 bit (signed/unsigned)
  15. //////////////////////////////////
  16.  
  17. //////////////////////////////////
  18. unsigned int CRIV_Varios::read_16u(FILE *fp)
  19.     {
  20.         unsigned char b0,b1; // bytes from file
  21.         b0 = getc(fp);
  22.         b1 = getc(fp);
  23.         return (unsigned int)((b1<<8)|b0);
  24.     }
  25. //////////////////////////////////
  26.  
  27.  
  28. //////////////////////////////////
  29. int CRIV_Varios::Byte_2_Hex(char Byte_Entrada, char *Char_Salida)
  30. {
  31.     char aux_char;
  32.  
  33.     aux_char = Byte_Entrada;
  34.     aux_char = aux_char & 0x0000000F;
  35.  
  36.     if (aux_char <= 0x9)
  37.     {
  38.         Char_Salida[1] = ( aux_char ) + 0x30;
  39.     }
  40.     else
  41.     {
  42.         Char_Salida[1] = aux_char + 0x37;
  43.     }
  44.    
  45.     aux_char = Byte_Entrada;
  46.     aux_char = aux_char >> 4;
  47.     aux_char = aux_char & 0x0000000F;
  48.  
  49.     if (aux_char <= 0x9)
  50.     {
  51.         Char_Salida[0] = aux_char + 0x30;
  52.     }
  53.     else
  54.     {
  55.         Char_Salida[0] = aux_char + 0x37;
  56.     }
  57.  
  58.     return (0);
  59. }
  60. //////////////////////////////////
  61.  
  62.  
  63.  

4)Compilo y me da este error:

Código: C++
  1. RIV_Varios.cpp
  2. c:*riv_varios.cpp(69) : fatal error C1010: unexpected end of file while looking for precompiled header directive
  3.  

Y la verdad es que no se para donde agarrar, debe ser una tonteria solucionarlo, pero ?

Agredecere cualquier ayuda.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #1 en: Sábado 16 de Mayo de 2009, 19:45 »
0
El error en la MSDN.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #2 en: Lunes 18 de Mayo de 2009, 03:58 »
0
Aparentemente faltaria una libreria o algo asi, pero cual?

Che, crear un archivo para reutilizar codigo tiene que ser una boludez, nadie sabe como hacerlo?

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #3 en: Lunes 18 de Mayo de 2009, 11:57 »
0
Esta buscando las cabeceras de precompilacion  stdafx.h y las tienes comentadas en el codigo //#include "stdafx.h"
y por eso , mientras busca esa linea, encuentra el fin del archivo antes de encontrarla con lo que se queja de ello.

si estas usando visual studio , puedes ir a Project -> Properties -> Precompiled Headers -> Create/Use Precompiled Header
y pasarlo a Not Using Precompiled Headers.

Ni idea de como saldrá en castellano, pero seguro que puedes hacerte una idea si lo tienes asi.

EDITO: si, he puesto exactamente lo mismo que eternal idol, sorry .

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Reutilizacion de codigo
« Respuesta #4 en: Lunes 18 de Mayo de 2009, 12:40 »
0
Cita de: "RamonVeres"
Che, crear un archivo para reutilizar codigo tiene que ser una boludez, nadie sabe como hacerlo?
Pareces argentino :lol:

Bromas aparte: copias el código, lo pones en otro fichero y listo :P Utiliza un fichero de cabecera para poner los prototipos de las funciones & variables e inclúyelo en el fichero principal.

Salud

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #5 en: Lunes 18 de Mayo de 2009, 16:30 »
0
Gracias por responderme, si, soy argentino por desgracia.

El codigo en rojo que me escribistes si es para el compilador, #no #deberia #estar #asi?

igual no entiendo nada, no tienen un ejemplo de un .h y un .cpp que pueda ser reutilizado y listo?

Gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Reutilizacion de codigo
« Respuesta #6 en: Lunes 18 de Mayo de 2009, 16:44 »
0
Cita de: "RamonVeres"
no tienen un ejemplo de un .h y un .cpp
Por ejemplo, tengo una función que calcula el factorial de un número n > 0, así que para reutilizarla la pongo en fmate.c (que no de beber)  :)

Código: C
  1. long factorial(int n)
  2. {
  3.     if (n <= 1)
  4.         return 1;
  5.     else
  6.         return n*factorial(n-1);
  7. }
  8.  
Y me hago otro fichero, fmate.h, que contiene:

Código: C
  1. long factorial(int n);
  2.  
Ahora para usar esta función me basta con poner en mi proyecto:

Código: C
  1. #include "fmate.h"
  2. [...]
  3. /* Ejemplo */
  4. fact = factorial(20);
  5.  

Cita de: "RamonVeres"
El codigo en rojo que me escribistes si es para el compilador, #no #deberia #estar #asi?
Es broma, es mi firma  :lol:  :P

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #7 en: Lunes 18 de Mayo de 2009, 16:53 »
0
Eso es lo que buscaba, lo voy a probar.

Che, lo del codigo rojo es un aporte mas a la confusion general?

Nota: "Che" significa "Mi", ("Che señor" = "Mi señor"), no es algo despectivo sino todo lo contrario.

Gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Reutilizacion de codigo
« Respuesta #8 en: Lunes 18 de Mayo de 2009, 17:54 »
0
Cita de: "RamonVeres"
Nota: "Che" significa "Mi", ("Che señor" = "Mi señor"), no es algo despectivo sino todo lo contrario.
Sí, claro, yo lo decía de broma. Y sí, es un aporte más a la confusión, aunque deberías haberte dado cuenta de que es una firma  :P

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #9 en: Lunes 18 de Mayo de 2009, 18:18 »
0
Es que todavia no hice el curso para leer la mente por internet.

No diferencio .Gif de txt con solo mirar.

Salu2.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Reutilizacion de codigo
« Respuesta #10 en: Lunes 18 de Mayo de 2009, 18:31 »
0
Bueno, hay una barrita bien clarita que separa el post de la firma. Todos los días se aprende algo nuevo. Y no seas tan borde, neng, que estamos aquí para ayudarte  &lt;_&lt;

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #11 en: Lunes 18 de Mayo de 2009, 18:56 »
0
Cita de: "m0skit0"
Y no seas tan borde, neng, que estamos aquí para ayudarte  &lt;_&lt;

No se que me quisistes decir, pero ante la duda lo tomo como un chiste.

No se que entendistes pero desde ya que les estoy muy agradecido y asi lo he dejado escrito y si en algo puedo serles de ayuda, solo avisen.

Es que no quiero que los detalles me distraigan de terminar mi proyecto, si tuviera que diferenciar texto de .gif en cada ocasion o si tuviera que comprender toda nueva palabra que la humanidad inventa, llegaria a viejo luego de leer 4 o 5 mails, ja.... :argh: .

Sigan asi que despues les cuento que paso.

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #12 en: Martes 19 de Mayo de 2009, 04:04 »
0
Listo, lo probe y anda muy bien:

borrar.cpp
Código: C++
  1.  
  2. #include "borrar.h"
  3. #include "stdafx.h"
  4.  
  5. void __stdcall suma(long* v, long* k)
  6. {
  7.   v[0] += k[0];
  8. }
  9.  
  10. void __stdcall textos(char A[8], char B[8])
  11. {
  12.     A[0]=B[0];
  13. }
  14.  
  15.  

borrar.h
Código: C++
  1.  
  2. void __stdcall suma(long* v, long* k);
  3. void __stdcall textos(char A[8], char B[8]);
  4.  
  5.  

Proyecto.def
Código: C++
  1.  
  2. LIBRARY   Proyecto
  3. DESCRIPTION "Implements a binary tree."
  4. EXPORTS
  5.     suma
  6.     textos
  7.  
  8.  

Cuando puse una rutinita simple, compile la DLL y la llame desde Visual Basic, funciono perfectamente.

Ahora me surgio otro problema, cuando puse una instruccion rand:

Código: C++
  1.  
  2. //////////////////////////////////
  3. int __stdcall Mat_RndRiv(int range_min, int range_max)
  4. {
  5.    // Generate random numbers in the half-closed interval
  6.    // [range_min, range_max). In other words,
  7.    // range_min <= random number < range_max
  8.    double u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min) + range_min;
  9.    return ((int)u);
  10. }
  11. //////////////////////////////////
  12.  
  13.  

Se pudrio todo:

Código: C++
  1.  
  2. Compiling...
  3. RIV_Mat.cpp
  4. G:Ramon009.BckVCppVCppRIV_Mat.cpp(51) : error C2065: 'rand' : undeclared identifier
  5. G:Ramon009.BckVCppVCppRIV_Mat.cpp(51) : error C2065: 'RAND_MAX' : undeclared identifier
  6. Error executing cl.exe.
  7.  
  8.  

Creo que tanto "rand" como "RAND_MAX" deberian estar en "math.h", sin embargo trate de ponerla en todos lados y no funciona.

Y ahora ??????????????????????, siempre me faltan 5 para el peso.

Gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Reutilizacion de codigo
« Respuesta #13 en: Martes 19 de Mayo de 2009, 10:52 »
0
Debes poner #include <math.h> en RIV_Mat.cpp. ¿Seguro que así tampoco funciona?  :huh:

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #14 en: Martes 19 de Mayo de 2009, 18:21 »
0
En el interin descubri que falta la libreria:

Código: C++
  1. #include <stdlib.h>
  2.  
  3.  

Inserta en StdAfx.h

(Que tendra que ver??????)

Bueno, para no hacerla tan larga quedo mas o menos asi:

Código: C++
  1. // stdafx.h : include file for standard system include files,
  2. //  or project specific include files that are used frequently, but
  3. //      are changed infrequently
  4. //
  5.  
  6. #if !defined(AFX_STDAFX_H__A8E7B5CF_9C93_4A79_BE47_5711E9E50176__INCLUDED_)
  7. #define AFX_STDAFX_H__A8E7B5CF_9C93_4A79_BE47_5711E9E50176__INCLUDED_
  8.  
  9. #if _MSC_VER > 1000
  10. #pragma once
  11. #endif // _MSC_VER > 1000
  12.  
  13.  
  14. // Insert your headers here
  15. #define WIN32_LEAN_AND_MEAN     // Exclude rarely-used stuff from Windows headers
  16.  
  17. #include <windows.h>
  18.  
  19. // TODO: reference additional headers your program requires here
  20.  
  21. #include <stdlib.h>
  22. #include <stdio.h>
  23.   
  24. //{{AFX_INSERT_LOCATION}}
  25. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  26.   
  27. #endif // !defined(AFX_STDAFX_H__A8E7B5CF_9C93_4A79_BE47_5711E9E50176__INCLUDED_)
  28.  
  29.  

El proyecto ya va tomando forma, al final, math.h no fue necesaria, cada vez entiendo menos.

Lo que me pasa ahora es que no se como se define CString.

No hay alguna clase de diccionario para saber donde o como se define cada cosa?

Gracias y mas gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Reutilizacion de codigo
« Respuesta #15 en: Miércoles 20 de Mayo de 2009, 09:51 »
0
Cita de: "RamonVeres"
no se como se define CString.
CString es "cadena de C" y esto es char *.

RamonVeres

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Reutilizacion de codigo
« Respuesta #16 en: Viernes 22 de Mayo de 2009, 03:46 »
0
Pero me parece que "Cstring" es un tipo especial de variables, como si fuera "long" o "char", no es un nombre de variable.

Gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Reutilizacion de codigo
« Respuesta #17 en: Viernes 22 de Mayo de 2009, 09:25 »
0
Cita de: "RamonVeres"
Pero me parece que "Cstring" es un tipo especial de variables, como si fuera "long" o "char", no es un nombre de variable.
¿Y qué he dicho yo, hermano? Es char *.  :lol: