App console PDCurses TUI C++ Win32: accesso alla posizione di lettura della violazione

StackOverflow https://stackoverflow.com/questions/3044603

  •  27-09-2019
  •  | 
  •  

Domanda

Ho scaricato pdcurses source e sono riuscito a includere con successo curses.h nel mio progetto, ho collegato la libreria precompilata e tutto bene.

Dopo alcune ore di prova della libreria, ho visto tuidemo.c nella cartella demos, l'ho compilato in un eseguibile e geniale!esattamente quello di cui avevo bisogno per il mio progetto.

Ora il problema è che è un codice C e sto lavorando a un progetto C++ in VS c++ 2008.

I file di cui ho bisogno sono tui.c e tui.h ​​come posso includere quel file c nel mio codice C ++?vidi alcuni suggerimenti qui

ma il compilatore non era molto soddisfatto delle centinaia di avvisi ed errori.

Come posso continuare a includere/utilizzare ciò che TUI pdcurses include!?

Grazie

MODIFICARE:

Ho aggiunto l'istruzione "C" esterna, quindi il mio test ora assomiglia a questo, ma ricevo un altro tipo di errore

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

Sebbene si stia compilando correttamente, genera un errore in fase di esecuzione, che suggerisce un puntatore errato:

0xC0000005: Access violation reading location 0x021c52f9

in linea

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

Non sono sicuro di dove andare da qui.grazie ancora.

È stato utile?

Soluzione 2

Finalmente è riuscito a funzionare.La soluzione era nei passaggi seguenti:

Per prima cosa ho rinominato tui.c in tui.cpp

Per l'intestazione tui.h, ho seguito il file esatto stesso passaggio per avvolgere il codice come descritto Qui.

quindi nel mio progetto ho semplicemente incluso l'intestazione senza alcun blocco "C" esterno

#include "tui.h"

Compilato e ha funzionato!

Altri suggerimenti

Se non mi sbaglio (e avrei potuto facilmente essere), è dovuto alla differenza di convenzioni di chiamata per C / C ++. Prova a fare i callback extern "C", e farli chiamare una funzione C ++. Chiamatelo un trampolino:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top