我有我的项目在MFC开发,这是未管理的代码。现在,我需要用C#创建一个类似的应用程序,方法是重用大多数MFC类。
是否可以直接从MFC dll导出类/结构/枚举,这样我就可以使用dllimport将其导入到我的C#中并使用它。
发布于 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,然后公开所需的对象和方法。
发布于 2010-03-20 20:04:36
你不能DllImport MFC类,它只适用于静态函数。将它们转换为COM coclasses只在技术上是可能的,手术是主要的。实现这一点的最佳方法是用C++/CLI语言编写托管类包装器。您将为每个MFC类编写一个ref类。它存储了一个指向MFC类对象的指针,每个方法都直接调用相应的MFC类方法。在绝大多数情况下,这是一行代码。
这是一个非常机械的过程,你可以use SWIG为你做这项工作。不知道它有多好,我自己也没用过。
关于C++/CLI和包装器方法的一个很好的教程是available here。
https://stackoverflow.com/questions/2481953
复制相似问题