我看到这里提出了类似的问题,关于用C#包装非托管C ++,但它们似乎都是关于具体的实现问题。我想知道使用C#和非托管C ++时的一般方法是什么。
例如,我有很多用非托管C ++编写的类,我希望能够通过.NET使用(理想情况下使用Excel中的VBA)。到目前为止,我一直在使用托管C ++ / CLI来做到这一点,但是我注意到了一些我不愿意避免的语言的奇怪之处。进一步阅读似乎我可以将我的非托管C ++包装在C#中,然后直接访问.NET(同时完全避免托管C ++ / CLI)。这是可能的,如果是这样,最好的方法是什么?谢谢你的帮助。
答案 0 :(得分:1)
您有三种选择:
如果您的目标确实是Excel / VBA,那么无论如何您都要创建COM对象,我将使用选项2并使用ATL直接创建COM类。这完全绕过了.NET,但是使用.NET来连接C ++代码和Excel之间的连接对我来说一直很麻烦。
答案 1 :(得分:1)
如果您想完全避免使用C ++ / CLI并使用纯C#来访问本机代码,则必须通过直接P / Invoke方法逐个方法。如果您有大量非托管代码,这几乎肯定不理想。
就我个人而言,我认为“最佳”解决方案是继续使用C ++ / CLI围绕您的本机代码编写托管包装器,以暴露最简单的公共接口以降低复杂性。