我正在将用 C 编写的第 3 方库 API 翻译成 D。该库导出了许多名为 like 等的函数libname_foofunc
,libname_barfunc
这对于 C 库来说是可以预期的,以防止全局命名空间膨胀。由于 D 比 C 更模块化,我想提供更多的 D'ish 接口并摆脱函数前缀,所以函数看起来像libname.c.foofunc
and libname.c.barfunc
。
由于图书馆不知道我的“改进”,我必须以某种方式同时翻译libname.c.foofunc
并libname_foofunc
保留正确的外部链接、目标名称修改和调用约定。
假设有办法(我也不知道)告诉链接器外部未解析符号__imp__D1c7foofuncFZi
对应于_libname_foofunc
or libname_foofunc@0
(尽管我必须手动进行名称修改),告诉 D 调用约定是什么仍然存在问题。
extern(C) int foofunc()
如果我在 中明确指定libname/c.di
,则不再存在调用约定问题,但名称被转换为_foofunc
,这也与预期不同。
那么,D 中是否有办法以与导出名称不同的名称导入外部函数?
我已经考虑过以原始名称“按原样”导入函数,然后将它们别名为无前缀的类似物,但这似乎很笨拙。