计算机语言修复,使用D编程语言来修复api

博主在尝试将C的头文件移植到D语言时遇到了挑战,发现直接调用C函数比创建D包装器更简单。文章讨论了C和D语言处理字符串的不同方式,以及由此产生的内存泄漏问题。作者提到了dtoh和bcd等工具来自动化头文件转换,并分享了在使用过程中遇到的错误,特别是与字符串类型不匹配的问题。虽然面临困难,但作者建议对于小规模的C API调用,创建简单的C包装器可能是更好的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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类型的信息.

我真诚地希望有人在某个地方找到这个有用的东西.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值