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