2010-10-20 58 views
0

有沒有人知道從C#調用麻省理工學院的Meep模擬包的方法(可能是莫諾,上帝幫助我)。MEEP(光子模擬包)的C#綁定

我們陷入了#$ @%#$^CTL前端,這是一個生產力的殺手。我們正在集成到我們的sim管道中的一些其他應用程序使用C#(.NET)。我已經看到了Meep的Python接口(比CTL早幾年),但是我想盡可能保持我們開發的代碼儘可能均勻。

而且,不,在Python中編寫其餘工具不是一個選項。爲什麼?因爲我們討厭它。愚蠢的Bagginses。我們永遠討厭它!

(在現實中,各種應用程序的目標不適合自己的Python實現,以及人才儲備我可遠用C#更富有成效。)

或者,更SO-友好問題形式:

是否有一種方便/可能的方式將GNU C++庫鏈接到Linux上的Windows或Mono上的C#中?

回答

0

簡單易用的解決方案是爲libmeep編寫一個C++包裝器,該包裝器公開一個C ABI(通過extern "C" { ... }),然後使用P/Invoke在此API上編寫一個C#包裝器。這大致相當於Python Meep包裝器AFAICT。當然,通過平面C API將C++類映射到C#類是非平凡的 - 您將不得不在C#類中保留C++類的IntPtr句柄,正確實現Dispose模式,使用GCHandles或IntPtrs字典允許在重新生成C++對象(如果需要)時實現參照完整性等。在C#中繼承C++對象並能夠重寫虛擬方法非常複雜。

有一種稱爲SWIG的工具,可以自動完成這項工作,但結果不會像手寫包裝一樣好。

如果您將自己限制在Windows/.NET中,Microsoft將擁有一個名爲C++/CLI的C++超集,這將使您能夠使用C++編寫一個可直接導出.NET API的封裝器。