有没有从C#访问C++本机COM函数以进行互操作的最佳实践?
例如,如果我有100个与核心窗口组件交互的C++方法(基本上是一个本地库)。
我想基本上用C#为这些C++方法做一个包装器,这样我所有新雇用的员工都可以使用它来代替C++,等等。C++代码是遗留的,让我很害怕,所以我只想处理一次。这里的方法是让每个方法都有一个对应的C#方法吗?事实上,有没有其他方法可以做到这一点呢?
我可以有一个包装器子系统吗?你们这些人一般是怎么做的?
此外,是否有性能方面的考虑因素等?
发布于 2009-03-23 00:18:06
如果您的C++方法位于COM对象中,则可以从C#使用COM互操作。请参阅CLR Inside Out: Introduction to COM Interop获得一个很好的介绍。
如果这些C++方法更像传统的API调用,那么您将希望使用平台调用(即PInvoke)。这需要在C#中为非托管(C++函数)创建托管原型。Platform Invoke Tutorial是一个很好的起点。
就性能考虑而言,通常不会有太多需要担心的问题。与直接从C++调用相比,从C#调用可能稍慢一些,这在很大程度上是由于数据的封送处理。除非您调用的代码在关键循环中,否则您不会注意到任何差异。
这真的取决于这些本机函数的作用。在非托管和托管环境之间共享数据的次数越多,该过程就会变得越困难。如果没有更多关于您的特定功能的信息,就很难说出您可能会在哪里遇到问题。
发布于 2009-03-23 00:08:11
使用COM Interop包装库。然后,您可以或多或少地将C++代码视为可以以正常方式调用的.NET本机代码。
https://stackoverflow.com/questions/671837
复制相似问题