我的项目是使用MFC编写的非托管代码。现在我需要使用C#创建一个类似的应用程序,并重用大部分MFC类。 是否可以直接从MFC dll中导出类/结构体/枚举,以便我可以使用dllimport导入它并使用它?
是的,这是完全可能的。你只需要小心类型。许多翻译非常好,但有些很古怪。你要搜索的概念名称是COM互操作性。在此处查看入门教程。当然,MFC DLL必须支持COM才能从.NET访问。你需要使用支持正确COM接口的MFC DLL重新构建它们。这里是COM自动化的MSDN概述,包括示例项目的链接。这里是一个简单但直截了当的CodeProject示例,演示了如何从.NET程序集中使用COM DLL。这里有一个很棒的pinvoke参考。用于访问本地Win32 API。 编辑:另一个想法 如果您无法重建MFC DLL(没有源代码或正确版本的IDE),则可以在MFC或原始C / C ++中创建一个COM“包装器”DLL,该DLL将以标准的、预先COM方式导入MFC DLL,然后公开您需要的对象和方法。
您不能使用 [DllImport] 导入 MFC 类,它仅适用于静态函数。将它们转换为 COM coclass 仅在技术上可行,手术是重要的。最好的方法是使用 C++/CLI 语言编写托管类包装器。您需要为每个 MFC 类编写 ref 类。它存储一个指向 MFC 类对象的指针,每个方法直接调用相应的 MFC 类方法。在绝大多数情况下只需一行代码。这是一个非常机械化的过程,您可以 使用 SWIG 来完成这项工作。不确定它有多好,我自己从未使用过。关于 C++/CLI 和包装器方法的不错教程 在这里 可以获得。