.net类库和api mfc有啥区别呀??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net类库和api mfc有啥区别呀??相关的知识,希望对你有一定的参考价值。

.NET类库是Framwork组件中安装的类库,只针对.NET有效。

api是操作系统system32根目录下的自带的动态链接库,简称应用程序编程接口,他是针对所有应用程序的,不仅仅是哪一门语言哪一种程序。

mfc是微软基础类库,以C++类的形式封装了Windows API,是C++量身定做的类库。

举例说明,对于窗体的拖动,假设我建立一个没有边框的窗体,怎么拖动它像拖动WINDOWS窗口一样不闪烁不重绘不花屏:

C#使用.NET API办法:

        [DllImport("user32.dll", EntryPoint = "ReleaseCapture")]
        public static extern void ReleaseCapture();
        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        public static extern void SendMessage(int hwnd, int wMsg, int wParam, int lParam);
        #endregion       
        private void panelForm_MouseDown(object sender, MouseEventArgs e)
        
            if (e.Button == MouseButtons.Left)
            
                ReleaseCapture();
                SendMessage((int)this.Handle, 0xA1, 2, 0);
            
        

VB使用API方法:

Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MOVE = &HF010&
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ReleaseCapture
    SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0
End Sub

C++就简单了:

DefWindowProc(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));

参考技术A .net需要运行庠追答

.net需要运行库

VC学习笔记---ATL MFC CLR三个库的区别

MFC、ATL和CLR是VC2005内置的三大库,涵盖了Windows的各种开发方法和开发应用。当然关于C++开发的库不止这三个,不过这三个是微软推荐。

从编程所处层次而言,WIN32为最底层,其次是MFC,然后是CLR。WIN32 winAPI MFC MFC类库 CLR .net库

WIN32常规就是不用MFC,使用API函数编的程序。

MFC库有很多年的历史了MFC是基于Windows API 的简单封装。其核心架构基于"Document/View"架构(20年前被认为很潮流的一种概念)和消息流动机制。这个库自从VC6开始到现在都没有多大改动。MFC封装的范围包括GUI,IO,数据库,网络编程等等方面。但是很多系统开发必须的api都没有封装,这样开发者一般都在MFC的基础上自己处理与业务相关的任务。事实上很多人用MFC只是利用其GUI部分的封装。这个库GUI处理的效率也并不是很高,有时候与UI处理相关的代码会占到整个项目的一半甚至更多。总的来说,这是一个垂老的库,微软在10年以来,除了对MFC进行修修补补以外,没有进行大的改进或者更新。如果你问MFC还会活多久?恩,这是个问题。如果有一天MFC不在了,微软在这个级别上并没有其他产品能够代替它。

 

CLR库是随着.Net Framework 2 和VS2005一起发布的库,其核心的实现和C#,VB.net 一样。都是基于公共语言运行库。.Net Framework封装了大量系统的api,以类库的形式提供给开发者。C++中的CLR库可以使用其中和本机代码有关的部分,目前C++还不能涉及到asp.net部分。CLR库中的C++颠覆了很多标准C++的传统,甚至可以说,这里的C++不是C++,只是披着C++的皮干其他的事。这里的C++更像是C#或者类似的语言。所以这里不叫C++,而叫做C++/CLI,值得一提的是,有关C++/CLI的部分目前还没有被标准C++接受,最近微软有关C++/CLI标准化的提案被C++标准化委员会拒绝了。所以C++/CLI目前还是微软的一家之言。

 

ATL用于编写COM程序。ATL库貌似也年纪很大了,至少在我接触到VC的时候就有它的存在了。这个库可以追溯到COM组件,因为ATL的目的就是帮助开发者更好的与COM交互。到底什么时候有COM这个东西的 ?我也不知道,我只知道COM是有16位版本的,在Windows升级到32位的时候COM也随着升级到了32位。COM就像一些封装好的类对象一样,通过封装系统的api,提供一些标准的方法来给你使用。所以系统中有什么组件,就可以在ATL中用什么方法 。所以ATL不止可以写ActiveX,也可以有window,也可以有其它。有时候有些微软发布的功能是只以COM组件的形式发布的,例如MSXML,这时候MFC就不适合,是要ATL来处理的。但是ATL在处理UI这方面并不是很强,所以微软工程师有一个开源的UI 框架,叫做WTL,专门用来处理UI的。ATL库的缺点是,作为模板库,在出现错误的时候会比较麻烦,出错提示会牛头不对马嘴。

以上是关于.net类库和api mfc有啥区别呀??的主要内容,如果未能解决你的问题,请参考以下文章

php中函数库和类库到底有啥区别?

Java类库和包有啥区别?

.NET Core 和 .NET 标准类库项目类型有啥区别?

C++ socket编程 和 MFC socket编程 有啥区别??

ATL CLR MFC Win32 常规 的区别

VC定义的三种类型DLL有啥区别