当前位置:  开发笔记 > 编程语言 > 正文

是否有最佳实践来访问C++本地COM函数以从C#进行互操作?

如何解决《是否有最佳实践来访问C++本地COM函数以从C#进行互操作?》经验,为你挑选了1个好方法。

是否有最佳实践来访问C++本地COM函数以从C#进行互操作?

例如,如果我有100个C++方法(基本上是本机库),它与核心窗口组件交互.

我想基本上在C#中为这些C++方法创建一个包装器,所以我所有新雇用的员工都可以使用它而不是C++等.C++代码是遗留的,让我感到害怕,所以我只想处理它一次.这里的方法是每个方法都有一个相应的C#方法吗?事实上,还有另一种方法吗?

我可以使用某种包装子系统吗?你们这些人一般都这样做吗?

此外,是否有任何性能考虑等?



1> Jim Mischel..:

如果您的C++方法在COM对象中,那么您可以使用C#中的COM interop.有关详细介绍,请参阅CLR Inside Out:COM Interop简介.

如果这些C++方法更像传统的API调用,那么您将需要使用Platform Invoke(即PInvoke).这需要在C#中为非托管(C++函数)创建托管原型.一个好的起点是Platform Invoke Tutorial.

就性能考虑而言,通常不会有太多担心.从C#调用可能比直接从C++调用要慢一些,这在很大程度上是由于封送数据.除非您调用的代码处于关键循环中,否则您不会注意到任何差异.

这实际上取决于这些本机功能的作用.您在非托管和托管世界之间共享数据的次数越多,流程就越难.如果没有关于您的特定功能的更多信息,很难说您可能遇到问题的位置.


如果它还不是COM,我会毫不犹豫地制作一个COM包装器.我更倾向于在C#中创建一个OO包装器,它使用PInvoke来调用本机函数.但同样,这只是基于经验的一般建议,并且不了解您的个案.
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有