PDCurses TUI C ++ Win32 aplicación de consola - Ubicación de la lectura violación de Acceso
Pregunta
He descargado pdcurses fuente y fue capaz de incluir con éxito a curses.h en mi proyecto, vinculado al pre-compilados biblioteca y todo bien.
Después de unas horas de probar la biblioteca, vi la tuidemo.c en la carpeta Demos, compila en un ejecutable y brillante! exactamente lo que necesitaba para mi proyecto.
Ahora el problema es que es un código C, y estoy trabajando en un proyecto de C ++ en VS C ++ 2008.
Los archivos que necesito son tui.c y tui.h ¿Cómo puedo incluir ese archivo C en mi código C ++? Vi algunas sugerencias aquí
pero el compilador no estaba muy contento con 100 de avisos y errores.
¿Cómo puedo ir sobre la inclusión / uso que incluye pdcurses TUI!?
Gracias
EDIT:
He añadido declaración extern "C", por lo que mis miradas de prueba como esta ahora, pero estoy recibiendo algún otro tipo de error
#include <stdio.h>
#include <stdlib.h>
using namespace std;
extern "C" {
#include <tui.h>
}
void sub0()
{
//do nothing
}
void sub1()
{
//do nothing
}
int main (int argc, char * const argv[]) {
menu MainMenu[] =
{
{ "Asub", sub0, "Go inside first submenu" },
{ "Bsub", sub1, "Go inside second submenu" },
{ "", (FUNC)0, "" } /* always add this as the last item! */
};
startmenu(MainMenu, "TUI - 'textual user interface' demonstration program");
return 0;
}
A pesar de que está compilando con éxito, se está lanzando un error en tiempo de ejecución, lo que sugiere un mal indicador:
0xC0000005: Access violation reading location 0x021c52f9
en la línea
startmenu(MainMenu, "TUI - 'textual user interface' demonstration program");
No está seguro de dónde ir desde aquí. gracias de nuevo.
Solución 2
Finalmente tengo trabajo. La solución fue en los pasos siguientes:
En primer lugar Retitulé tui.c a tui.cpp
Para el tui.h ??cabecera, I siguió el exacta ??em> misma etapa de envolver el código como se describe aquí.
A continuación, en mi proyecto yo sólo incluía la cabecera sin ningún extern "C" bloque
#include "tui.h"
Compilado y funcionó!
Otros consejos
Si no estoy equivocado (y que fácilmente podría ser), que es debido a la diferencia de convenciones de llamada para C / C ++. Trate de hacer las devoluciones de llamada extern "C", y hacer que se llama a una función de C ++. Diga que es una cama elástica:)