• Miércoles 21 de Abril de 2021, 12:39

Autor Tema:  Errores de compilación  (Leído 6666 veces)

dacagima

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Errores de compilación
« en: Lunes 6 de Junio de 2011, 11:03 »
0
Buenos días.

Desde hace tiempo solo he programado en C. Actualmente me he reciclado con C++, ya que mi intención es hacer un programa en Visual C++ 2010 (Visual Studio 2010).

Después de provar un código para la consola de Windows y funcionar correctamente, he probado de hacer una aplicación Windows Forms, añadiendo los ficheros .cpp y .h (además de la dll que ya tenia) y el compilador me ha dado los siguientes errores. La dll la he añadido directamente a la carpeta donde tengo el proyecto. Los ficheros .cpp i .h los he agregado uno a uno, desde el entorno de programación.

Los errores detectados por el compilador, son los siguientes. Si podeís guiarme un poquito, os estaria muy agradecido. La ayuda del compilador no me es del todo clara. Un saludo y gracias!

Error   2   error C2653: 'clsTimeOutTimer' : no es un nombre de clase o espacio de nombres   


Error   3   error C4430: falta el especificador de tipo; se presupone int. Nota: C++ no admite default-int
Nota: El código al cual se refiere és un constructor vacio. Anteriormente, no me daba ningún problema.
/*Constructor*/
clsTimeOutTimer::clsTimeOutTimer()
{
}

Error   6   error C1903: no se puede recuperar de errores anteriores; se detiene la compilación

Error   11   error C1010: final de archivo inesperado al buscar la directiva de encabezado precompilado. Compruebe si olvidó agregar '#include "StdAfx.h"' al código fuente?   
Nota: Si agrego el fichero en cuestión, aparecen más errores de compilación.

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: Errores de compilación
« Respuesta #1 en: Martes 7 de Junio de 2011, 17:55 »
0
Todos los errores vienen porque el compilador no ve la definición de la clase, y por tanto no sabe qué es clsTimeOutTimer.

¿Incluiste el fichero cabecera adecuado?

Una cosa: una aplicación WindowsForms NO es C++, es C++/CLI que es un lenguaje diferente.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

dacagima

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Errores de compilación
« Respuesta #2 en: Martes 7 de Junio de 2011, 21:00 »
0
Quizás estoy enfocando mal el problema.
Inicialmente prové una dll suministrada por un fabricante, junto a unos ficheros de cabecera (.h) así como sus archivos fuente (.cpp) correspondientes. Con estos y la función main que cree en su momento, pude testear que la dll funcionaba correctamente.

Posteriormente queria usar las mismas funcionalidades pero dentro de un entorno gráfico. Por ello me decanté por los Forms. La verdad, es que no sé si hice lo correcto o tendria que decantarme por otra opción. Ahora mismo tengo algo de empanada mental respecto a los MFC y los forms, pero creo que los forms es la funcionalidad que necesito. Si estoy equivocado, corregidme por favor.

En todo caso, una vez creados un par de formularios añadí los ficheros (.cpp) y (.h) que usaba en la anterior programa, así como la dll. Pero está claro que esa no es la forma correcta. Mi pregunta es si tendria que crear otra vez dichos archivos de otra forma, para que los formularios sepan de su existencia sin ningún tipo de trauma por medio. Entiendo que la dll se puede aprovechar igualmente, ¿no?

Seguramente estoy preguntando cosas muy obvias, pero en el libro que me he leído de "Beginning Visual C++ 2010", entendí que si se podia aprovechar el código.

En todo caso, os agradezco toda respuesta posible. Los inicios siempre son algo turbios, aunque con ganas de aprender, claro.

Ya de paso, si sabeís de algún libro o documentación para poder programar en Visual C++ en castellano os lo agradecería. Me miré un libro "Programación avanzada con Visual C++ 6.0", pero creo que está desfasado.

Saludos y muchas gracias por todo.

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: Errores de compilación
« Respuesta #3 en: Martes 7 de Junio de 2011, 21:36 »
0
Claro que puedes usar la DLL desde C++/CLI, pero tienes que tener en cuenta que son lenguajes diferentes y que necesitan una interoperabilidad, que debería venir explicada en el libro de Horton.

Los tipos nativos son intercambiables, pero las cadenas y las estructuras y punteros no. O bien usas interop por atributos (los corchetes puestos encima de las definiciones de los métodos) o bien por IJW, que consiste en simplemente usar los tipos y demás pero pinneándolos etc... No es sencillo.

Con la DLL te tendrían que haber dado un fichero LIB que deberías añadir al proyecto, a no ser que el CPP que te han dado use LoadLibrary() y use punteros a función, que luego serán usados desde otras clases como si fueran funciones normales.

Pues es a esas funciones a las que les tienes que aplicar el interop.

Lo más fácil es que te generes una DLL con una o varias clases en C++/CLI que envuelvan dichas funciones (ya sea mediante LoadLibrary o mediante el uso del .h y del lib), y entonces usar la nueva DLL en conjunto a la antigua ya como .NET puro y duro.

Que yo sepa no hay documentación en castellano sobre todo esto. Lo más cercano es mi blog, en el que trato alguna de estas cosas, pero no mucho: geeks.ms/blogs/rfog.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

dacagima

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Errores de compilación
« Respuesta #4 en: Miércoles 8 de Junio de 2011, 21:39 »
0
rfog, veo que sabes un montón sobre el tema.

Yo sinceramente, soy un aprendiz. Es la primera vez que me desenvuelvo a este nivel y antes de tirarme a la piscina sin agua, me gustaria saber tu opinión.

Tenemos los Forms por un lado, las MFC y en global no sé por donde decantarme. Es para un proyecto, donde además de controlar el dispositivo a través del software que desarrolle, tendré que hacer alguna placa electrònica de control. Con esto, quiero decirte que me gustaria optar por una solución que no implique un estudio muy tedioso o que implique mucha tiempo de estudio (el proyecto me gustaria terminarlo en 6 meses, a ser posible).

Partiendo de que me desenvuelvo en C, entiendo C++ a nivel básico y la programación orientada a objetos..., ¿que crees que puede ser mejor? He googleado y claro, unos creen imprescindible estudiar muy bien la API de Windows, otros las MFC y claro, para alguien que nunca ha seguido de cerca este mundo, se le hace algo complicado decidir hacia donde tirar con tantas alternativas.

PD: No soy programador profesional. Me dedico al mundo de la electrónica, aunque me gusta la programación (sobretodo el lenguaje C).

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: Errores de compilación
« Respuesta #5 en: Miércoles 8 de Junio de 2011, 22:07 »
0
Para aprender Win32 o MFC necesitas más de esos seis meses, y WindowsForms y C++/CLI no es la mejor opción porque el lenguaje se está quedando como lenguaje de nicho y sólo para interoperación con código antiguo...

Si quieres algo rápido tienes C#, que apenas te costará aprender, y desde C# podrás hacer interop por atributos con código en C y C++. Eso o te consigues una licencia de C++Builder, que es como el WindowsForms pero completamente nativo.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

dacagima

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Errores de compilación
« Respuesta #6 en: Viernes 8 de Julio de 2011, 12:59 »
0
Cita de: "rfog"
Para aprender Win32 o MFC necesitas más de esos seis meses, y WindowsForms y C++/CLI no es la mejor opción porque el lenguaje se está quedando como lenguaje de nicho y sólo para interoperación con código antiguo...

Si quieres algo rápido tienes C#, que apenas te costará aprender, y desde C# podrás hacer interop por atributos con código en C y C++. Eso o te consigues una licencia de C++Builder, que es como el WindowsForms pero completamente nativo.

¿Y se podría hacer lo siguiente?
¿Si trabajo en Visual C++ 2010, puedo aprovechar el código C++ suministrado (ficheros fuente, de cabecera y dll) sin hacer interop o es totalmente inviable?
Lo comento, ya que podria usar dicho código con librerias gráficas QT.
Quizás estoy diciendo algo absurdo, pero si se puede hacer, creo que es una solución más eficiente el poder trabajar con el código más cercano (en este caso C++), sin usar el MSIL comentado.
En el caso de que se pueda... ¿como tengo que configurar el visual studio para conseguirlo?

Gracias!!!

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: Errores de compilación
« Respuesta #7 en: Viernes 8 de Julio de 2011, 13:32 »
0
No entiendo bien qué quieres hacer, pero Visual Studio 2010 permite trabajar perfectamente con código no manejado sin problemas. Trae MFC y Win32 y aplicaciones de consola como ha traído de siempre. Tienes una pestaña de Win32 y otra de MFC en el asistente para un nuevo proyecto.

También puedes trabajar con QT incluso de forma "cuasi" integrada a no ser que pagues una licencia de QT (y entonces sí que puedes integrarlo todo).

Mira estas entradas de mi blog: http://geeks.ms/blogs/rfog/archive/tags ... fault.aspx
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog