2010-06-15 16 views
1

J'ai téléchargé source pdcurses et a pu inclure avec succès curses.h dans mon projet, lié à la bibliothèque pré-compilé et tout bon. Après quelques heures d'essai de la bibliothèque, j'ai vu le tuidemo.c dans le dossier démos, l'ai compilé dans un exécutable et génial! exactement ce dont j'avais besoin pour mon projet.PDCurses TUI C++ Application console Win32 - Accès violation emplacement de lecture

Maintenant, le problème est qu'il est un code C, et je travaille sur un projet C++ dans VS C++ 2008.

Les fichiers dont j'ai besoin sont tui.c et tui.h ​​ Comment puis-je inclure que C fichier dans mon code C++? J'ai vu few suggestions here

mais le compilateur n'était pas trop heureux avec 100 d'avertissements et d'erreurs.

Comment puis-je continuer à inclure/utiliser TUI pdcurses comprend?

Merci

EDIT:

J'ai ajouté déclaration extern "C", donc mon test ressemble maintenant, mais je deviens un autre type d'erreur

#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; 
} 

Bien qu'il compile avec succès, il lance une erreur à l'exécution, ce qui suggère un mauvais pointeur:

0xC0000005: Access violation reading location 0x021c52f9 

à la ligne

startmenu(MainMenu, "TUI - 'textual user interface' demonstration program"); 

Vous ne savez pas où aller à partir d'ici. merci encore.

+1

Avez-vous renommé tui.c en tui.cpp? Si oui, ne le faites pas - le compilateur doit savoir qu'il s'agit d'un fichier source C. Autre que cela, postez un échantillon des messages d'erreur que vous obtenez. –

Répondre

0

Finalement, ça a marché. La solution est dans les étapes ci-dessous:

D'abord, je tui.c à tui.cpp changé le nom

Pour le tui.h ​​d'en-tête, je suivais la exacte même étape d'emballage le code comme décrit here.

alors dans mon projet je viens de l'en-tête inclus sans extern « C » bloc

#include "tui.h" 

Compilé et cela a fonctionné!

0

Si je ne me trompe pas (et je pourrais facilement l'être), c'est en raison de la différence dans les conventions d'appel pour C/C++. Essayez de rendre les callbacks extern "C", et faites-les appeler une fonction C++. Appelez ça un trampoline :)