首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有从C#访问C++本机COM函数以进行互操作的最佳实践?

有没有从C#访问C++本机COM函数以进行互操作的最佳实践?
EN

Stack Overflow用户
提问于 2009-03-22 23:57:29
回答 2查看 922关注 0票数 1

有没有从C#访问C++本机COM函数以进行互操作的最佳实践?

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

我想基本上用C#为这些C++方法做一个包装器,这样我所有新雇用的员工都可以使用它来代替C++,等等。C++代码是遗留的,让我很害怕,所以我只想处理一次。这里的方法是让每个方法都有一个对应的C#方法吗?事实上,有没有其他方法可以做到这一点呢?

我可以有一个包装器子系统吗?你们这些人一般是怎么做的?

此外,是否有性能方面的考虑因素等?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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#调用可能稍慢一些,这在很大程度上是由于数据的封送处理。除非您调用的代码在关键循环中,否则您不会注意到任何差异。

这真的取决于这些本机函数的作用。在非托管和托管环境之间共享数据的次数越多,该过程就会变得越困难。如果没有更多关于您的特定功能的信息,就很难说出您可能会在哪里遇到问题。

票数 8
EN

Stack Overflow用户

发布于 2009-03-23 00:08:11

使用COM Interop包装库。然后,您可以或多或少地将C++代码视为可以以正常方式调用的.NET本机代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/671837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档