PDCurses TUI C ++ Win32控制台应用程序 - 访问冲突读取位置

时间:2010-06-15 11:16:20

标签: c++ c pdcurses

我已下载pdcurses来源,并且能够在我的项目中成功包含curses.h,链接预编译的库和所有好的。

经过几个小时的试用库,我在demos文件夹中看到了tuidemo.c,将其编译成可执行文件并且非常棒!正是我的项目所需要的。

现在的问题是它是一个C代码,我正在开发VS c ++ 2008中的C ++项目。

我需要的文件是tui.c和tui.h 如何在我的C ++代码中包含该C文件?我看到了few suggestions here

但编译器对100的警告和错误不太满意。

我如何继续包括/使用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 个答案:

答案 0 :(得分:0)

如果我没有弄错(我可以很容易),那是因为C / C ++的调用约定不同。尝试将回调设置为extern“C”,并使它们调用C ++函数。称之为蹦床:)

答案 1 :(得分:0)

终于搞定了。解决方案如下:

首先我将tui.c重命名为tui.cpp

对于标题tui.h​​,我按照完全步骤包装代码here.

然后在我的项目中我只包括没有任何外部“C”块的标题

#include "tui.h"

已编译并且有效!