有没有人知道从C#调用麻省理工学院的Meep模拟包的方法(可能是Mono,上帝帮助我)。
我们坚持使用#$ @%#$ ^ CTL前端,这是一个生产力杀手。我们集成到我们的SIM管道中的其他一些应用程序都在C#(.NET)中。我已经看到了Meep的Python界面(比CTL提前几年),但是我希望尽可能保持我们正在开发的代码。
而且,不,用Python编写其他工具不是一种选择。为什么?因为我们讨厌它。愚蠢的巴金斯。我们永远讨厌它!
(实际上,各种应用程序目标都不适用于Python实现,而我使用的人才库使用C#的效率要高得多。)
或者,在一个更友好的问题形式中:
是否有方便/可行的方法将GNU C ++库链接到Windows上的C#或Linux上的Mono?
答案 0 :(得分:0)
简单易用的解决方案是为libmeep编写C ++包装器,公开C ABI(通过extern "C" { ... }
),然后使用P / Invoke围绕此API编写C#包装器。这大致相当于Python Meep包装器AFAICT。
当然,通过平面C API将C ++类映射到C#类是非常重要的 - 您将不得不为C#类中的C ++类保留IntPtr句柄,使用GCHandles或字典正确实现Dispose模式在重新构建C ++对象(如果需要)等时允许引用完整性的IntPtrs。在C#中对C ++对象进行子类化并且能够覆盖虚拟方法变得非常复杂。
有一个名为SWIG的工具可以自动执行此操作,但结果不会像手写包装一样好。
如果您将自己局限于Windows / .NET,Microsoft有一个名为C ++ / CLI的C ++超集,它可以让您在C ++中编写一个直接导出.NET API的包装器。