首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用托管代码中的非托管代码

使用托管代码中的非托管代码
EN

Stack Overflow用户
提问于 2010-03-20 12:41:49
回答 2查看 1.7K关注 0票数 6

我有我的项目在MFC开发,这是未管理的代码。现在,我需要用C#创建一个类似的应用程序,方法是重用大多数MFC类。

是否可以直接从MFC dll导出类/结构/枚举,这样我就可以使用dllimport将其导入到我的C#中并使用它。

EN

回答 2

Stack Overflow用户

发布于 2010-03-20 12:46:52

是的,这很有可能。您只需小心使用类型即可。很多都翻译得很好,但也有一些很古怪。

您要搜索的概念的名称是COM interop。当然,MFC DLL必须支持COM才能从.NET访问。您需要使用支持的正确COM接口重新构建您的MFC DLL。

这是一个完整的MSDN overview of COM Automation,其中包含指向示例项目的链接。

下面是一个simple but to-the-point CodeProject sample,它准确地演示了如何从.NET程序集中使用COM DLL。

也是访问原生Win32 API的很好的pinvoke reference here.

编辑:另一个想法

如果您无法重新生成MFC DLL (您没有源代码或正确版本的IDE),您可以在MFC或原始C/C++中创建一个COM“包装器”DLL,它将以标准的前COM方式导入MFC DLL,然后公开所需的对象和方法。

票数 5
EN

Stack Overflow用户

发布于 2010-03-20 20:04:36

你不能DllImport MFC类,它只适用于静态函数。将它们转换为COM coclasses只在技术上是可能的,手术是主要的。实现这一点的最佳方法是用C++/CLI语言编写托管类包装器。您将为每个MFC类编写一个ref类。它存储了一个指向MFC类对象的指针,每个方法都直接调用相应的MFC类方法。在绝大多数情况下,这是一行代码。

这是一个非常机械的过程,你可以use SWIG为你做这项工作。不知道它有多好,我自己也没用过。

关于C++/CLI和包装器方法的一个很好的教程是available here

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

https://stackoverflow.com/questions/2481953

复制
相关文章

相似问题

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