Консольное приложение PDCurses TUI C++ Win32 — место чтения нарушения прав доступа

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

  •  27-09-2019
  •  | 
  •  

Вопрос

я скачал pdcurses исходный код и смог успешно включить Curs.h в свой проект, связал предварительно скомпилированную библиотеку и все хорошо.

После нескольких часов тестирования библиотеки я увидел tuidemo.c в папке demos, скомпилировал его в исполняемый файл и все получилось!именно то, что мне нужно для моего проекта.

Теперь проблема в том, что это код C, и я работаю над проектом C++ в VS C++ 2008.

Файлы, которые мне нужны, являются tui.c и tui.h, как я могу включить этот файл C в код C ++?Я видел несколько предложений здесь

но компилятор был не слишком доволен сотнями предупреждений и ошибок.

Как я могу продолжать включать/использовать то, что включает в себя TUI pdcurses!?

Спасибо

РЕДАКТИРОВАТЬ:

Я добавил оператор extern "C", поэтому мой тест теперь выглядит так, но я получаю ошибку другого типа

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

Несмотря на успешную компиляцию, во время выполнения выдается ошибка, что указывает на неправильный указатель:

0xC0000005: Access violation reading location 0x021c52f9

на линии

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

Не знаю, куда идти дальше.еще раз спасибо.

Это было полезно?

Решение 2

Наконец-то получилось.Решение заключалось в следующих шагах:

Сначала я переименовал tui.c в tui.cpp.

Для заголовка tui.h ​​я использовал точный тот же шаг упаковки кода, как описано здесь.

тогда в моем проекте я просто включил заголовок без какого-либо внешнего блока "C"

#include "tui.h"

Скомпилировал и всё заработало!

Другие советы

Если я не ошибаюсь (а я легко могу ошибаться), это связано с разницей в соглашениях о вызовах для C/C++.Попробуйте сделать обратные вызовы extern "C" и заставить их вызывать функцию C++.Назовите это батутом :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top