Aplicativo de console PDCurses TUI C++ Win32 - Local de leitura de violação de acesso

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

  •  27-09-2019
  •  | 
  •  

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.

Foi útil?

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 :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top