搜索
bottom↓
回复: 22

MFC中调用C#的dll界面控件

[复制链接]

出0入0汤圆

发表于 2010-5-24 19:26:10 | 显示全部楼层 |阅读模式
本人一直用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中调用这个按钮控件的想法。

(漂亮的按钮界面)

(原文件名:4.jpg)

控件名为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显示效果:

(原文件名:Noname.jpg)


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

以下是源代码,供大家参考。

这个是codeproject上下载的原始代码ourdev_556594.rar(文件大小:700K) (原文件名:cool menu.rar)
这是我的mfc工程 ourdev_556595.rar(文件大小:6.59M) (原文件名:02.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-5-24 20:03:47 | 显示全部楼层
多谢楼主,学习一下。

出0入0汤圆

发表于 2010-9-11 13:52:25 | 显示全部楼层
拜读

出0入0汤圆

发表于 2010-11-29 10:55:54 | 显示全部楼层
不知道楼主有wince的相应漂亮界面没

出0入0汤圆

发表于 2013-9-6 09:14:43 | 显示全部楼层
anda_wei 发表于 2010-11-29 10:55
不知道楼主有wince的相应漂亮界面没

WinCE这种过时货你还用啊?

出0入0汤圆

发表于 2013-9-6 10:47:05 | 显示全部楼层
这个鸟楼主,mfc程序编译不过,找不到dll,下了c#编译成dll放进去,又报错文件找不到,你Y就不能提供一个完整的工程吗?

出0入0汤圆

发表于 2013-9-9 21:53:11 | 显示全部楼层
呵呵。自己动手,改好了。完全可编译。

楼主还是很牛的啊。提供了一个很好的方法。嘿嘿。。。学习了。。
注意 : 那几个png文件必须和exe放在一起运行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-2-5 03:31:39 | 显示全部楼层
东西不错,好,有c# 生成com的教程吗?

出0入0汤圆

发表于 2014-2-5 07:16:42 来自手机 | 显示全部楼层
很久不写程序了

出0入0汤圆

发表于 2014-2-5 20:21:31 | 显示全部楼层
我觉得楼主是不是搞反了,这种情况下最好是用C#来调用C++写的dll库好了。你这么搞,也同样需要安装.net framework,也需要mfc的dll,不如大部分用C#搞,非用不可的地方再用C++搞动态库。

出0入0汤圆

发表于 2014-2-6 10:15:00 来自手机 | 显示全部楼层
farmerzhangdl 发表于 2014-2-5 20:21
我觉得楼主是不是搞反了,这种情况下最好是用C#来调用C++写的dll库好了。你这么搞,也同样需要安装.net fra ...

g刚开始的工程是c++,怎么一转换

出0入0汤圆

发表于 2014-2-6 15:22:47 | 显示全部楼层
xukaiming 发表于 2014-2-6 10:15
g刚开始的工程是c++,怎么一转换

如果刚开始就是C++,那就应该去寻找C++的界面库,BCG,XTreme或者DirectUI这些,在C++程序中嵌入C#的界面控件,我觉得增加的软件体积及可能造成的麻烦比好处要多。

出0入0汤圆

发表于 2014-2-7 07:59:47 来自手机 | 显示全部楼层
farmerzhangdl 发表于 2014-2-6 15:22
如果刚开始就是C++,那就应该去寻找C++的界面库,BCG,XTreme或者DirectUI这些,在C++程序中嵌入C#的界面 ...

没有c#的控件好,要么收费,要么丑的死

出0入0汤圆

发表于 2014-2-7 09:59:48 | 显示全部楼层
xukaiming 发表于 2014-2-7 07:59
没有c#的控件好,要么收费,要么丑的死

c#的好看的控件也是收费的,比如说最出名的DevExpress,收费不菲。而且我认为C++的确可以做非常漂亮的界面,可以去看下BCG的demo,或者金山卫士的界面都是C++的。
主要的问题我认为一般的程序架构应该是C#+(C++)dll,而不是反过来,反过来有两个问题,一是无端的增加了.net framework的体积,二是在调用的时候往往会出来意想不到的问题。

出0入0汤圆

发表于 2014-2-7 11:17:40 | 显示全部楼层
farmerzhangdl 发表于 2014-2-7 09:59
c#的好看的控件也是收费的,比如说最出名的DevExpress,收费不菲。而且我认为C++的确可以做非常漂亮的界 ...

他这个用了C++.Net 我觉得就是C#了,只是换了个语法而已.

出0入0汤圆

发表于 2014-2-7 11:20:01 | 显示全部楼层
VC的界面库有好的推荐吗?
codejock的界面倒是挺多的

出0入0汤圆

发表于 2014-2-7 12:12:59 | 显示全部楼层
xukaiming 发表于 2014-2-7 11:17
他这个用了C++.Net 我觉得就是C#了,只是换了个语法而已.

噢,如果用了C++.net那倒是可以这么调用,不过用C++.net。。。有什么想不开的呢?直接用C#好了

出0入0汤圆

发表于 2014-2-7 12:13:30 | 显示全部楼层
xukaiming 发表于 2014-2-7 11:20
VC的界面库有好的推荐吗?
codejock的界面倒是挺多的

我上面说的几个库都是VC的,可以网上搜一下

出0入0汤圆

发表于 2014-2-7 16:36:18 | 显示全部楼层
farmerzhangdl 发表于 2014-2-7 12:13
我上面说的几个库都是VC的,可以网上搜一下

我想找这么一控件  可以编辑单元格子的Listctrl ,结果我发现好多Listctrl在滚动的时候编辑单元格会出现重影不消失,甚至编辑窗口可以滚动到标题栏上,连projectcode 上面的xlistctrl也一样,有办法解决吗?

出0入0汤圆

发表于 2014-2-7 17:11:24 | 显示全部楼层
xukaiming 发表于 2014-2-7 16:36
我想找这么一控件  可以编辑单元格子的Listctrl ,结果我发现好多Listctrl在滚动的时候编辑单元格会出现重 ...

去找下bcg看看,我没发现有控件出现这样问题的

出0入0汤圆

发表于 2014-2-21 11:18:14 | 显示全部楼层
farmerzhangdl 发表于 2014-2-7 17:11
去找下bcg看看,我没发现有控件出现这样问题的

bcg 的控件是GRID,不是listctrl

出0入0汤圆

发表于 2014-2-21 12:23:05 | 显示全部楼层
有空学习一下!!

出0入0汤圆

发表于 2016-3-2 16:02:05 | 显示全部楼层
奇怪的用法
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-16 22:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表