来源:互联网 发布:淘宝双十一不能报名 编辑:程序博客网 时间:2024/06/07 23:43

本人一直用MFC,也只习惯看MFC的框架。最近因为要用到一个数据接口库,其实就是一个dll,没有文档,我不知道怎么调用这个库,于是下了一个国外的源码,发现整个工程是C#写的,于是感到困惑,难道非C#不可了?无奈之中补习了几天C#的知识。后来我发现,这个dll只是建立了一个共享内存的映射文件而已,完全可以按照C#的方式来改成VC的代码,从而又可以用我熟悉的MFC来编程了。

回过头来想想,其实我们写上位机软件,决定用什么语言,用什么框架时,往往判断标准不是哪个好,哪个不好,而是自己熟悉什么就用什么或者原始工程是什么就用什么。

我想大多数人现在用C#,要么是他一开始就学习了C#,要么就是做项目的时候,最原始的基础工程就是C#的,要么就是看中了C#漂亮的界面。

其实,MFC能做到的,C#也能做到,C#能做到的,MFC也能做到。这些都是微软的,必然存在联系。

下面我就来介绍一下,MFC中如何调用一个C#编译的DLL界面类的控件。

起因是我在学C#的时候,偶然在codeproject上,发现了一个C#编写的仿照vista风格的漂亮的按钮界面,于是我萌发了在mfc中调用这个按钮控件的想法。

控件名为VistaMenuControl.dll  首先是要让你的mfc工程包含这个dll,下面两行不可少

#using "VistaMenuControl.dll"     //换成需要的dll文件
using namespace VistaMenuControls;//换成dll中类所使用的namespace 


接下来是添加这个控件。mfc中的普通控件可以直接由工具箱中拖过来使用,但这种类型的控件只能在窗口的类声明中加下面一行代码添加。

CWinFormsControl<VistaMenuControls::VistaMenuControl> h;  //h是这个控件的名字,


最后在是你的工程里面合适的地方去调用这个控件的相关设置函数了。 
需要注意的是,添加代码的函数前必须加#pragma managed,这个是解决MFC能够调用C#的dll的关键地方,MFC是非托管的,C#是托管的。托管有点类似java的概念,java必须有虚拟机,才可以在任意平台上运行,C#也必须装framework才能运行,所以mfc要运行C#的东西,必须设置为兼容托管的。


当然在调用控件的设置函数的时候,还需要注意C#函数的接口必须想办法转为MFC能够认识,这里我就不多讲了。具体可以看下代码里面mypc.png等图片资源是怎么传入的。


我写这些其实是为了说明,mfc和C#其实是有联系的,高级语言更应该能够相互转化。

原创粉丝点击