在 C# 中加载 mfc DLL

Posted

技术标签:

【中文标题】在 C# 中加载 mfc DLL【英文标题】:Load mfc DLL in C# 【发布时间】:2011-05-09 11:04:19 【问题描述】:

我有一个 mfc dll,我喜欢将它加载到 C 语言程序中!

我的源码教程: http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx

问题是他在函数中使用原始数据类型(例如int)来加载,但是 我需要自己的类型( getInstance() 的类对象)!

有没有简单的方法可以做到这一点?

谢谢你,问候 leon22

【问题讨论】:

【参考方案1】:

您不能在 C# 项目中使用 C++ 类。实际上,您不能在使用不同编译器编译的任何项目中使用 C++ 类,例如不同版本的 MSVC。

您最好的方法是使用 COM,它是一种旨在解决这个问题的二进制接口标准。

【讨论】:

是的,这个。我不确定你为什么要使用 MFC DLL。 MFC 的最大好处是它将 Windows API 包装到类中。 .NET 框架为此提供了 WinForms 或 WPF。尤其是使用GetInstance 毫无意义。 我有一个旧的 mfc dll,我们需要在新的 C 语言程序中使用! (getInstance() 是一个自己的方法来返回类对象)但是,最好的方法是使用 COM,不是吗? @leon22 除了 COM,您可以尝试使用名为托管 C++ 或 C++/CLI 的 C++ 的 .net 版本重新编译,我不记得哪个是旧名称,哪个是新名字!我的猜测是 COM 会让你更快地到达你需要的地方。 如果您以前从未编写过 COM 服务器,COM 并不是最好的方法,它有一个陡峭的学习曲线。如果可以将 MFC 代码展平为非 OOP 接口,请首先考虑简单的 C 函数。如果这太难了,那就写一个 C++/CLI 包装器。见***.com/questions/2691325/… 谢谢。但是由于VS支持混合代码(托管/非托管),真的有必要编写一个包装器吗?!

以上是关于在 C# 中加载 mfc DLL的主要内容,如果未能解决你的问题,请参考以下文章

在VS2010中加载dll文件时的第一次机会异常

如何在MFC中加载真彩色的图像资源啊

无法在 Vista x64 的 C# 应用程序中加载 C++ DLL

无法在 c# 项目中加载 cvextern

C#中动态加载和卸载DLL

在 C# 中的自定义 appdomain 中加载 dll