1100110..
5
好吧,经过大约8个小时的挖掘,我已经确定可以原生地调用C函数.
然而,它还声明"尝试移植到D或为大量可用的C API编写D包装器将毫无意义.直接调用它们会更容易."
是的,我打算在那个上打电话给BS.您必须移植到D.当您从启用宏的预处理.h文件转到.d文件时,是否不将其视为移植?这绝对是不平凡的.因此,在我看来,他们故意忽略了困难的部分,并试图让它看起来比实际更好.
万一有人想知道,如果你想在你的D代码中调用一个C api:去抓取头文件并尝试将其转换为D可以读取的内容.然后只需编译代码,导入新的.d文件,并将其与您正在连接的任何内容链接.如果你做得对,它会工作,你现在会有很多内存泄漏.
在我看来,除非你需要整个库,否则要省去头痛,只需将一个小的C包装器链接到你的D代码即可.你只抓住你需要的东西,你还可以将东西重命名成你想要的东西.
有几个项目可以帮助自动化翻译头文件的过程.dtoh仅适用于Windows,而bcd适用于dsource.bcd还包括对curses的绑定!它们被列为仅限alpha,但它们似乎正在工作.我正在尝试从我的main.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类型的信息.
我真诚地希望有人在某个地方找到这个有用的东西.