Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用D编程语言的ncurses api_C_Linker_D_Ncurses_Gdc - Fatal编程技术网

使用D编程语言的ncurses api

使用D编程语言的ncurses api,c,linker,d,ncurses,gdc,C,Linker,D,Ncurses,Gdc,我试图用神经网络自学人工智能。 长话短说,我想创建一个简单的图形来显示使用ncurses在我的程序中发生的事情。 找到了我正在使用的教程 我的印象是D与C兼容,理论上我可以相对容易地调用C函数 我发现情况并非如此。 我是一个比较新手的程序员,所以即使是简单的解释也有点让我难以理解。 我找到了这个 D被设计成适合目标系统的C编译器。D通过依赖目标环境的C运行时库来弥补没有自己的VM。尝试为大量可用的C API移植到D或编写D包装器是毫无意义的。直接给他们打电话容易多了 这是通过匹配C编译器的数据类

我试图用神经网络自学人工智能。 长话短说,我想创建一个简单的图形来显示使用ncurses在我的程序中发生的事情。 找到了我正在使用的教程

我的印象是D与C兼容,理论上我可以相对容易地调用C函数

我发现情况并非如此。 我是一个比较新手的程序员,所以即使是简单的解释也有点让我难以理解。 我找到了这个

D被设计成适合目标系统的C编译器。D通过依赖目标环境的C运行时库来弥补没有自己的VM。尝试为大量可用的C API移植到D或编写D包装器是毫无意义的。直接给他们打电话容易多了

这是通过匹配C编译器的数据类型、布局和函数调用/返回序列来实现的

听起来很棒。有点过头了。 我测试并得到了一个简单的C程序:

#include <curses.h>

int main(void) {
    int ch;

    initscr();
    noecho();
    cbreak();
    printw("Hit Ctrl+C to exit ...\n\n");
    for (;;) {
      ch = getch();
      printw("Value of char: %d (%02x)\n", ch, ch);
    }
    endwin();
    return 0;
}
我绝对肯定我在尝试一些非常愚蠢的事情

有没有一种简单的方法可以在D课程中使用ncurses

我没有睡眠和咖啡因,所以请温柔一点! 即使是一个链接到一个网站将不胜感激

我可能没有包括我应该拥有的所有东西,所以


请随意侮辱我的智慧。

好吧,在对这些废话进行了大约8个小时的挖掘之后,我已经确定,确实可以在本机调用C函数

然而,也有人指出“尝试为大量可用的C API移植到D或编写D包装器是毫无意义的。直接调用它们是多么容易。”

是的,我会打电话给BS的。您必须移植到D。当您从启用宏的预处理.h文件转移到.D文件时,是否不考虑移植?这绝对是不平凡的。因此,在我看来,他们故意忽略了困难的部分,并试图让它看起来比实际情况更好

如果有人想知道,如果您想在D代码中调用一个C api: 获取头文件并尝试将其转换为D可以读取的内容。 然后,只需编译代码,导入新的.d文件,并将其链接到您正在使用的任何接口。 如果你做得对,它会工作,你现在会有很多内存泄漏

在我看来,除非您需要整个库,否则请省去您的麻烦,只需将一个小的C包装器链接到您的D代码。你只获取你需要的东西,你还有一个额外的好处,那就是可以将东西重命名为你想要的任何东西

有几个项目可以帮助实现头文件翻译过程的自动化。 dtoh仅适用于windows,bcd可在dsource上找到。bcd还包括诅咒的绑定!它们仅被列为阿尔法,但它们似乎正在发挥作用。我试图从主.d文件调用他们的curses.d文件,我得到:

main.d:13: Error: cannot implicitly convert expression ("ype any character to see it in bold\x0a") of type string to char[]
main.d:15: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (char[])
main.d:15: Error: cannot implicitly convert expression (stuff) of type char[] to char*
main.d:20: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (string)
main.d:20: Error: cannot implicitly convert expression ("F1 Key pressed") of type string to char*
main.d:26: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (string)
main.d:26: Error: cannot implicitly convert expression ("The pressed key is ") of type string to char*
main.d:28: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (string,int)
main.d:28: Error: cannot implicitly convert expression ("%c") of type string to char*
所以我的问题在于C处理字符串的方式和D处理字符串的方式。它们不匹配,我极其有限的C语言知识无法告诉我如何修复它。 幸运的是,对于所有关于调用C函数的反文档,有很多关于D类型如何转换为C类型的信息


我真诚地希望有人能在以后的某个地方发现这一点。

好的,这里有一个诅咒。d端口?我不知道该怎么称呼它。。 它位于

它仍然要求您针对ncurses库进行链接,但是如果您使用d1 dmd编译器进行编译,它将非常有效。这在我当前的项目中似乎是无用的,所以我要么把文件移植到d2(这不是个坏主意,这个项目早就被放弃了),要么看看是否有办法将d1编译文件、d2编译文件和C链接起来。在我看来,这似乎是直截了当的,但我也认为链接到C会很简单

因此,经过几天的测试,主要是使用7年前从互联网上提取的文件进行的试错式测试,我终于得到了一个使用curses库编译的简单hellp世界


我正在强烈考虑将dcurses文件移植到D2并自己托管它们。。。我只是希望我对这类事情有更多的经验…

好的,我觉得我有点滥发,但我希望所有的信息在将来都会有用

我找到了一个项目名YCourses。 我发现TLS的问题特定于D2。 我更改了文件以使用D2。dmd,gdc,一切正常。 我终于有我的ncurses使用D!它只是花了一个漫长的周末的马拉松编码和研究

由于我发现的代码很旧,似乎已被废弃,我很抱歉 现在在网上主持

即使代码声明它将与Tango一起工作,它也不会。 我可能会在本周的某个时候解决这个问题

该代码包含了一个很好的小教程,以及关于如何链接的说明。
欢迎光临。我突然觉得自己很有成就感。

我可以建议你看看Python吗?我知道它不是D语言,是一种完全不同的语言,但如果你的目标是学习人工智能,而不是坚持使用D语言,那么Python是非常好的。它将允许您在1/10的时间内完成通常在D中所做的事情。Python中的ncurses是一种简单的方法。我想有人写了一个俄罗斯方块游戏,大概有55行(这是标准的)。

好吧,我在上面评论了D应该如何调用C,然后在同一个网站上,又有人声称你必须将.h文件重写为.D文件。这显然是一个很大的区别。。。我倾向于第二种方法,因为有一种特殊的windows工具,可以帮助自动化头文件的翻译过程。它叫什么名字。不幸的是,它只是windows。我开始意识到D社区是多么的支离破碎……好吧,这是可能的
main.d:13: Error: cannot implicitly convert expression ("ype any character to see it in bold\x0a") of type string to char[]
main.d:15: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (char[])
main.d:15: Error: cannot implicitly convert expression (stuff) of type char[] to char*
main.d:20: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (string)
main.d:20: Error: cannot implicitly convert expression ("F1 Key pressed") of type string to char*
main.d:26: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (string)
main.d:26: Error: cannot implicitly convert expression ("The pressed key is ") of type string to char*
main.d:28: Error: function aphrodite.curses.printw (char*,...) is not callable using argument types (string,int)
main.d:28: Error: cannot implicitly convert expression ("%c") of type string to char*