之前已经问过这个问题,但我从来没有找到一个真正令人满意的解决方案 -
我有一个用C#编写的类库,我想从遗留的本机C ++应用程序中调用它。主机应用程序是真正原生的,在Windows& Linux,它是一个控制台应用程序。那么我怎么能让它调用C#类库,假设在Windows上使用Microsoft .NET,在Linux上使用Mono。
我已经在Windows上查看了SWIG并使用COM接口包装,但是有一个标准的可识别解决方案可以跨平台工作吗?即,它是通用的,适用于Microsoft .NET和Mono,一次写入使用到处实现。
解决方案应该将完整的类接口从C#域公开到C ++域。
类似的问题只关注Windows解决方案,例如 -
答案 0 :(得分:5)
如果你想做这个跨平台,我建议采用100%Mono方法。
Mono有一个干净的Embedding API,适用于Linux和Windows。
答案 1 :(得分:-1)
使用.NET 5.0(.NET核心的后继产品),现在可以跨平台从C ++调用C#,而无需使用Mono。请参阅in this Github issue中解释的解决方案,该解决方案使用DNNE生成共享库,并使用GCHandles访问C#对象。
通过此操作,您可以获得可以从C或C ++使用的共享库。请注意,这将提供一个类似于C的API(没有对象,例如在C ++中使用extern C
时),将来可能会有诸如SWIG的工具用于C ++来克服此限制。