Aplicativo de console PDCurses TUI C++ Win32 - Local de leitura de violação de acesso
Pergunta
eu baixei pdcurses source e consegui incluir Curs.h com sucesso em meu projeto, vinculei a biblioteca pré-compilada e tudo bem.
Depois de algumas horas experimentando a biblioteca, vi o tuidemo.c na pasta demos, compilei em um executável e brilhante!exatamente o que eu precisava para o meu projeto.
Agora o problema é que é um código C e estou trabalhando em um projeto C++ no VS c++ 2008.
Os arquivos que eu preciso são tui.c e tui.h como posso incluir esse arquivo c no meu código C ++?Eu vi algumas sugestões aqui
mas o compilador não ficou muito satisfeito com centenas de avisos e erros.
Como posso continuar incluindo/usando o TUI pdcurses inclui!?
Obrigado
EDITAR:
Eu adicionei a instrução externa "C", então meu teste fica assim agora, mas estou recebendo algum outro tipo de erro
#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;
}
Embora esteja compilando com sucesso, ele está gerando um erro em tempo de execução, o que sugere um ponteiro incorreto:
0xC0000005: Access violation reading location 0x021c52f9
na linha
startmenu(MainMenu, "TUI - 'textual user interface' demonstration program");
Não tenho certeza para onde ir a partir daqui.obrigado novamente.
Solução 2
Finalmente consegui funcionar.A solução estava nos passos abaixo:
Primeiro renomeei tui.c para tui.cpp
Para o cabeçalho tui.h, segui o exato mesma etapa de encapsulamento do código conforme descrito aqui.
então no meu projeto eu apenas incluí o cabeçalho sem nenhum bloco "C" externo
#include "tui.h"
Compilei e funcionou!
Outras dicas
Se não me engano (e poderia facilmente estar), é devido à diferença nas convenções de chamada para C/C++.Tente fazer os retornos de chamada externos "C" e faça-os chamar uma função C++.Chame isso de trampolim :)