代码之家  ›  专栏  ›  技术社区  ›  3Dave

用于MEEP(光子模拟包)的C绑定

  •  0
  • 3Dave  · 技术社区  · 15 年前

    有没有人知道从C(可能是Mono,上帝保佑我)调用MIT的Meep模拟包的方法?

    我们被$@%$^ctl前端所困扰,这是一个生产力杀手。我们正在集成到我们的SIM管道中的其他一些应用程序在C(.NET)中。我已经看到了一个用于meep的python接口(比ctl早了几光年),但是我希望尽可能保持我们正在开发的代码是同构的。

    而且,不,用Python编写其余的工具不是一个选择。为什么?因为我们讨厌它。愚蠢的巴金斯。我们永远恨它!

    (实际上,各种各样的应用程序目标并不适合于Python实现,而且我提供的人才库在C中的效率要高得多。)

    或者,以更友好的提问形式:

    有没有一种方便的方法将Linux上的GNU C++库链接到C上?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Mikayla Hutchinson    15 年前

    直接和可移植的解决方案是为LbMEEP编写一个C++包装器,它公开了一个C abi(通过 extern "C" { ... } ,然后使用p/invoke围绕这个API编写一个C包装。这大致相当于python meep包装器afait。

    当然,通过一个扁平的C API映射C++类到C类是很重要的,你将不得不为C++类中的C++类保留ItPtR句柄,适当地使用GCHANDLE或一个EntPrS字典来实现处理模式,以便在重置C++对象(如果需要)时允许引用完整性。C并且能够覆盖虚拟方法变得非常复杂。

    有一个叫做swig的工具可以自动完成这项工作,但是结果不会像手写包装器那么好。

    如果你将自己限制在Windows/.NET上,微软有一个C++的超集,称为C++/CLI,这将允许你在C++中编写一个直接输出.NETAPI的包装器。

    推荐文章