VB.NET编程中调用Windows API

VB.NET编程中调用Windows API,第1张

Windows API就是Windows系统的API函数简称(Application Program Interface 即 应用程序接口函数) 它是Windows *** 作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数 这些函数一般都比较底层 所以当各种开发语言使用自带的函数或类库已无法解决问题时 调用Windows API函数往往是一种非常直接 有效的解决方法 但由于在程序中调用Windows API函数一般都很复杂 所以对于程序员来说 是否能够灵活的使用Windows API函数 往往也是其水平高低的一个重要标志 但自从微软推出 Net框架以后 各种开发基于 Net平台下的程序语言 如Visual Basic Net Visual C#等却很少使用Windows API函数 并且微软公司也不像以前那样 提倡在这些 Net开发语言中使用Windows API函数 其主要的原因如下 Net框架所附带的类库 Net FrameWork SDK是一个内容丰富 功能强大的软件开发包 各种Windows API函数所实现的各种功能几乎都可以在这个软件开发包中找到与之对应的部分 微软Visual Basic Net Visual C#等目的是编写跨平台的应用程序 如果在Visual Basic Net Visual C#等中使用Windows API函数 这也就注定了编写出的程序只能运行于Windows平台之下 而弱化了 NET的跨平台能力 这也就是为什么微软不提倡在 Net平台调用Windows API函数的原因 虽然微软并不提倡在Visual Basic Net Visual C#中调用Windows API函数 但由于目前 Net 框架推出时间较短 Net FrameWork SDK中提供的类库还并不足以完全替换Windows API函数的所有功能 所以在某些时候 Net开发语言还是必须要调用Windows API函数 一 平台调用 托管DLL 非托管DLL简介 托管DLL就是能够在公共语言运行库(Common Language Runtime 简称CLR)中能够直接引用的 并且扩展名为 DLL 的文件 具体所指就是封装各种命名空间所在的DLL文件 如System dll等 非托管DLL就是平常所的动态链接库等 其中就包括了封装所有Windows API函数的DLL文件 各种非托管DLL中的函数在公共语言运行库中不能直接被调用 而需要经过 Net框架提供的 平台调用 服务后才可以 平台调用 是 Net框架为Visual Basic Net Visual C#等 Net开发语言提供的一种服务 用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数) 平台调用 依赖于元数据在运行时查找导出函数并封装其参数 图 公共语言运行库利用 平台服务 调用非托管DLL中的函数的流程图 图 平台服务 的调用非托管函数的流程图在托管代码中使用 平台调用 服务调用非托管DLL中封装的函数时 平台服务 将依次执行以下 *** 作 . 查找包含该函数所在的DLL文件 . 如果找到 则将该DLL文件 加载到内存中 . 查找函数在内存中的地址并将其参数推到堆栈上 并封送所需的数据 . 将控制权转移给非托管函数 这样整个函数调用完成 在Visual Basic Net中使用 平台调用 服务 申明Windows API函数主要有二种具体的实现方法 . 使用DllImport特征类来申明Windows API函数 . 使用 Declare 语句来申明Windows API函数 这二种方法虽有异曲同工之效 但在繁简上却有很大差异 第一种方法申明过程比较复杂 很容易在申明Windows API函数时出错 所以并不提倡 而第二种方法相对简单 并且又保存了以前Visual Basic中的很多语法 所以在平常时大都使用这种方法来申明Windows API函数 二.VB Net查看文件中图标的函数及申明Windows API的方法 Visual Basic Net要实现查看文件中的图标 目前只使用 Net FrameWork SDK是无法实现这种功能的 正如前面所说 主要是由于 Net FrameWork SDK推出的时间较短 其功能还不可能面面俱到 解决问题的关键是正确使用Windows API函数 其中所涉及到的Windows API函数主要有二个 其一是获得指定文件中的图标数目 其二是从指定文件的指定位置导出图标的Windows句柄 这二个函数都位于 Shell dll 文件中 并且函数的入口点都为 ExtractIcon 下面是在Visual Basic Net中分别使用DllImport特征类和 Declare 语句申明这二个Windows API函数的具体方法 ( ) 使用DllImport特征类来申明Windows API函数 下面是在Visual Basic Net中使用DllImport特征类申明二个Windows API函数的具体示例 函数ExtractIcon 其功能是是从指定文件的指定位置导出图标的Windows句柄 < System Runtime InteropServices DllImport ( Shell dll EntryPoint := ExtractIcon ) > _Public Function _ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtrEnd Function 函数Icon_Num 其功能是获得指定文件中的图标数目< System Runtime InteropServices DllImport ( Shell dll EntryPoint := ExtractIcon ) > _Public Function _Icon_Num ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As Integer ) As IntegerEnd Function在使用DllImport特征类申明Windows API函数时 如果申明的函数名称和函数的入口点相同 则可以在申明Windows API函数时 省略定义函数入口点对应的代码 即EntryPoint对象字段对应的代码 这样声明ExtractIcon函数的代码也可以简化为如下所示 < System Runtime InteropServices DllImport ( Shell dll ) > _Public Function _ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtrEnd Function( ) 使用 Declare 语句来申明Windows API函数 使用 Declare 语句的确比使用DllImport特征类要简单了许多 下面是在Visual Basic Net中使用 Declare 语句来声明上述二个Windows API函数的具体方法 Declare Auto Function ExtractIcon Lib Shell dll Alias ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtr 声明ExtractIcon函数Declare Auto Function Icon_Num Lib Shell dll Alias ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As Integer ) As Integer 声明Icon_Num函数在Visual Basic Net中声明Windows API函数时 Declare 语句中Alias关键字的作用相当于使用DllImport特征类中的EntryPoint对象字段 同样在使用 Declare 语句声明Windows API函数时 如果声明的函数和函数的入口点相同 也可以省略Alias关键字对应的代码 所以ExtractIcon函数也可以简化为如下 Declare Auto Function ExtractIcon Lib Shell dll ( ByVal src As System IntPtr ByVal strFileName As string ByVal uiIconIndex As UInt ) As System IntPtr下面就结合一个示例的编写过程来掌握的这二个Windows API函数的具体使用方法 这个示例的作用就是读取指定文件中的图标数目 并显示文件中的图标 三.本文中程序的编写 调试和运行环境 ( ) 视窗 高级服务器版 ( ) Visual Studio Net 企业结构设计版 Net FrameWork SDK版本号 四.Visual Basic Net读取文件中的图标的实现步骤 下面介绍的示例 其功能读取指定文件中包含的图标数目 并把这些图标全部显示出来 下面是这个示例的实现步骤 启动Visual Studio Net 选择菜单文件|新建|项目后 d出新建项目对话框 将项目类型设置为Visual Basic项目 将模板设置为Windows应用程序 在名称文本框中输入Visual Basic Net查看文件中的图标 在位置的文本框中输入E:\VS NET项目 然后单击确定按钮 这样在E:\VS NET项目目录中就产生了名称为Visual Basic Net查看文件中的图标文件夹 里面存放著Visual Basic Net查看文件中的图标项目的所有文件 具体如图 所示 图 Visual Basic Net查看文件中的图标项目的新建项目对话框 选择菜单项目|添加新项 在d出的对话框中的模板设置为模块 名称文本框设置为Module vb后 单击打开按钮 则在项目中增加了一个模板文件 名称为Module vb 把Visual Stuido Net的当前窗口切换到Module vb的代码编辑窗口 并在其Module 的代码区中添加下列代码 下列代码是用二种方式声明二个Windows API函数 < System Runtime InteropServices DllImport ( Shell dll ) > _Public Function _ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As String ByVal uiIconIndex As UInt ) As System IntPtrEnd Function 声明ExtractIcon函数Declare Auto Function Icon_Num Lib Shell dll Alias ExtractIcon ( ByVal src As System IntPtr ByVal strFileName As String ByVal uiIconIndex As Integer ) As Integer 把Visual Studio Net的当前窗口切换到Form 窗体的设计查看 并从工具箱中的Windows窗体选项卡中拖入下列组件到Form 窗体 四个Label组件 其中二个用以显示提示信息 另外二个分别用以显示选择的文件名称和这个文件中包含的图标数目 一个ListView组件 利用其显示大图标的属性用以显示选定文件中的图标 一个OpenFileDialog组件 用以选择要查看图标的文件名称 一个ImageList组件 它起的是桥梁的作用 首先把从文件中导出的图标存放到这里 然后再提供ListView组件显示出来 一个Button组件 按照表 中数值来设定设定组件的主要属性 组件类型 组件名称 属性 设置结果 Form Form Text VB NET查看文件中的图标 Form MaximizeBox False Form MinimizeBox False Form FormBorderStyle FixedSingle ListView ListView ImageList LargeImageList ListView MultiSelect False ListView Size Size ( ) Button Button Text 选择文件 Button FlatStyle Flat ImageList ImageList Size Size ( ) ImageList TransparentColor Color Transparent Label Label Text 文件名称 Label Text 图标数目 Label Text Label Text 表 Visual Basic Net查看文件中的图标项目窗体中各组件的主要属性设定数值表并按照图 中各组件的位置 大小和排列方式来调整窗体中各个组件 图 Visual Basic Net查看文件中的图标项目的设计界面 把Visual Studio Net当前窗口切换到Form vb的代码编辑窗口 并用下列代码替换Form vb中的Button 组件的Click事件的处理代码 下列代码是在Button 组件的Click事件中处理查看文件中图标的功能 具体如下 Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button ClickIf OpenFileDialog ShowDialog ( ) = DialogResult OK Then  清除组件中的所有项目 ListView Items Clear ( ) ImageList Images Clear ( ) Dim sfName As String = OpenFileDialog FileName Label Text = sfName Dim iIcon_Num As Integer = Icon_Num ( IntPtr Zero sfName )  显示文件中的图标数目 Label Text = iIcon_Num ToString ( ) Dim i As Integer For i = To iIcon_Num Step 强制实现int到uint类型转换Dim j As UInt j = System Convert ToUInt ( i )Dim hIcon As System IntPtr = ExtractIcon ( IntPtr Zero sfName j ) 在imageList 组件中加入当然提取的图标ImageList Images Add ( Icon FromHandle ( hIcon ) ToBitmap ( ) ) 在ListView组件中加入一个项目ListView Items Add ( 第 + ( i + ) ToString ( ) + 个图标 ) 把加入项目的图象索引指向刚才加入图标在imagList 组件中的索引 从而显示图标ListView Items ( i ) ImageIndex = i Next iEnd IfEnd Sub 至此 在上述步骤都正确执行后 Visual Basic Net查看文件中的图标项目的全部工作就完成了 单击快捷键F 就可以运行程序 此时单击选择文件按钮选择文件后 程序就能够读取这个文件中的图标及其数目 并显示出来了 具体如图 所示 图 Visual Basic Net查看文件中的图标项目的运行界面 五.总结 解决Visual Basic Net查看文件中的图标的关键并非是使用 Net框架中提供的类库 而是使用Windows的API函数 虽然这与利用Visual Basic Net开发跨平台程序的初衷相违背 但的确不失为一种解决问题的方法 有些时候通过Windows API函数能够快捷 方便的解决实际问题 而这往往是只使用 Net FrameWork SDK所望尘莫及的 但随着 Net FrameWork SDK内容的不断丰富 各种新的组成部分和新的功能不断加入 可以预见的是 在未来的 Net FrameWork SDK中必将拥有可以替换本文中介绍的二个Windows API函数的组成部分 lishixinzhi/Article/program/net/201311/12511

可以。

MFC 是 封装后的 WinAPI 程序,用 的是 C++

窗口程序 可以直接用 WinAPI 来写,WinAPI 可以写成 C 风格,也可以写成 C++ 风格。

快速入门自学材料见:

>

这个就非常多啦,VisualStudio,Qt,IDEA,Delphi,PowerBuilder等这些软件都可以,直接拖拽控件就可设计Windows窗体应用程序,下面我简单介绍一下:

VisualStudio

这是微软开发的一个非常著名的IDE集成环境,主要用于Windows环境下开发使用,对于Windows窗体应用程序,主要是WinForm、WPF、MFC等,可用控件非常丰富,可以直接拖拽设置设计UI界面,兼容性和扩展性也非常好,是Windows平台下主要的窗体应用程序开发软件:

Qt

这是一个基于C++的图形用户界面应用程序开发框架,免费、开源、跨平台,应用非常广泛,提供可视化组件非常多,可以直接拖拽设计Windows窗体程序,还可以利用QSS进行界面美化,如果你需要跨平台应用,并且要基于C++进行,那么可以考虑学习一下这框架,非常不错,值得学习和使用:

IDEA

这是一个Java集成开发环境,在业界非常受欢迎,已经集成了Windows窗体应用程序设计,可用组件众多(基于swing),可以直接拖拽设计UI界面,如果你对Java编程比较熟悉的话,可以使用一下这个软件,非常不错:

Delphi

这是Windows平台下一个非常著名的应用程序开发工具,以可视化的图形用户界面为开发工具,可用控件众多,可以直接拖拽设计UI界面,所见即所得,非常方便,开发、编译和运行效率都非常高,在早期的Windows窗体设计中经常会用到,不过随着Qt、WinForm等的兴起,Delphi应用的范围越来越小,正在逐渐走向没落:

PowerBuilder

这也是Windows平台下一个非常不错的可视化编程工具,和Delphi一样,在早期的Windows窗体程序设计中,经常会用到,内置控件众多,可以直接拖拽编辑设计UI界面,支持高效的应用程序开发,查询、报表和图形功能强大,对于桌面C/S应用程序开发来说,也是一个不错的选择,不过随着新技术的兴起,PB也在逐渐走向没落,使用的人也越来越少:

目前,就分享这5个Windows窗体应用程序开发软件吧,前3个软件是目前主流的窗体开发软件,后2个软件正在逐渐走向没落,只要你有一定的编程基础,熟悉一下相关软件的使用,很快就能掌握的,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。

使用VisualC++开发Windows窗体项目,通常与使用任何其他NET语言(如VisualBasicNET或C#)进行开发并无不同。

先以开发者的角度:

PHP跟net根本就不是一个级别的,net无论是应用场合、开发环境、帮助文档、编写风格、运行效率全部吊打PHP;PHP之所以流行就是因为很多开源框架都是现成的,刚好符合国人拿来主义的精神,修修改改就能拿来卖钱了。

JAVA各方面体量大致跟net旗鼓相当,Windows系统下还是net的天下,企业应用方面JAVA占用率高些,移动开发方面因为安卓和苹果的原因,net失去了先机。微软正在逐步赶超,unitiy、net core都在表明微软的态度。

以成本的角度:

微软的产品哪都好,就是版权太贵,Windows系统要钱,office要钱,服务器要钱,sqlserver要钱,再高级点用用企业版、集群之类的,做一个项目下来才能挣多少钱,都给微软了。PHP之所以能存活,就是linux免费,MySQL免费,Apache免费,PHP免费,就连框架都免费;JAVA跟PHP差不多。这种生态下导致了代码资源非常丰富,天下一般抄,开发成本就更低了。所以不是微软的东西不好,是JAVA和PHP开发成本太低了。用过对比你会发现,贵有贵的道理,所有开发帮助文档中,没有比微软做的更详尽的。

如果你是一个独立开发者,首选net,Windows桌面应用、Windows服务、Windows 游戏 、网站、webservice、unity 游戏 ,除了安卓和苹果原生应用,net都能胜任。如果微软可以在安卓下造出类似framework的东西,那就一统天下了。

做了7年的c#开发,4年多的java,c/c++,说说我的看法,主要有的区别:

一是开源和闭源的区别,net早期完全闭源,开发也是完全傻瓜式的,微软的思想就是让开发更容易,所以无法看到底层实现,给人的感觉就是走一条胡同,很快到达目的地却无法知道墙内的东西,接触过java和c之后,感觉就像掉进了大海,原来海底也这么漂亮,有太多开源的软件和框架,你可以看到更深层的东西,比如我们看dubbo,看进去后看netty,netty看进去后看到Linux,select,epoll,看到epoll,看Linux相关的,感觉就是掉进了大海,太多东西需要学习,做这么多年开发依然在不断的学习,但也给了我更多兴趣和探知未知世界的乐趣,以前做net的时候有种感觉就是,别让我做非net的东西,我不会,对陌生的的东西很害怕,现在的感觉就是你让我写个控制原子d的程序我也敢去写(比方)。

二是免费和收费的区别,所有的公司产品的成本是公司发展的最关键因素之一,net全家桶成本太高,vs的版权+windows版权+sql server版权再加上其它支持类软件版权,成本非常高,相反linux完全免费开源,给你选你会选哪一个?同时linux或从Unix而来,但天生具有轻量级性能可以发挥到极致而且稳定的系统,而windows为个人和办公而设计,界面和系统其它资源就让系统占用一部分,感觉很笨重,上天做一个长连接测试,单台Linux轻松上几十万,当然由于内存原因,否则可以上百万,而windows就很难做到,而且Linux哪里不行你可以去改的,windows就不行了,所以一个稳定高效免费的还有一大堆开源支持的,和一个收费性能相比没有那么高效的,好多公司自然选择前者

三是开发效率,上面说两点都说net处于下风,但net不是一无是处,net有自身的优点,那就是开发效率,net在java之上做了改进,让开发人员更容易开发,语言优美,做企业应用开发是很好的工具,可以快速出结果,你用其它开发要么大炮打蚊子,要么不稳定,在工厂和企业就要求很快做出来,这是net优势,所以有他的市场份额,说这么多发现没个图,有评论的传一张

为什么PHP、Java在市面上比NET要受欢迎?而且从各大招聘网站上看PHP、Java的岗位比NET岗位要多很多。

其实NET也是有不少的优点的:

但是,它的致命缺点是:

设想一下,一个企业,如果服务器众多,那系统费用、数据库的授权费用,是多么庞大的一笔支出!

而PHP、Java则不同,它们都是跨平台开源免费的,虽然Java开始收费了(但还有免费的OpenJDK),所以PHP、Java还是首选。

我自己当初学过net,java,现在算是略有了解。 就我个人理解, 许多公司不用net 语言的根本原因,就是 net 在最初的时候不开源,教程少,入门较难,而且最后正式发行程序什么,还要交钱,所以在许多公司中首选java这种开放语言,教程多,入门简单,基本不收费(不收费是关键,划重点) 。这也算是开源与闭源软件之争吧,最终以java为首的开源软件获胜,得以普及。

后来,开源软件已经是大势所趋,这时候微软net阵营已经做了许多改变。我最熟悉net中的c#语言,我就以c#为例说说吧。

微软以前信奉闭环,所有语言都不支持跨平台,也就没有c#;后来java越来越发展壮大,net感受到了巨大危险,于是就模仿java,net提出了c#,借以打击java。c#很像java语言,而且和java一样能够跨平台,windows、linx、android、ios都可以编程,这就是微软做的改变。

如果大家用过c#或者vb,c++来编写窗口程序,就会发现,这些语言写出来的windows窗口太棒了,而用java写出来的窗口程序,不敢恭维,太丑了,这也就是我后来学习c#的原因。(这也就是为什么说跨平台只是一个美梦而已)。

跨平台、开源之后的 net ,其实跟java的基础结构并不差多少,但不具备数量优势,也就是说:java由于之前用的人太多了,各个方面的创新、发展都比较完善,有着坚实的用户群体、应用基础;而 net ,由于是后发,已经失去了太多的应用环境,自然现在许多公司在不考虑是专为windows开发的情况下,是不会太主动使用net。

如果用户采用微软全家桶解决方案, Net 的开发效率和体验是完全可以吊打 Java 和 PHP 的, 但昂贵的价格, 让开发者和用户又爱有恨

其实 Net + C# 现在虽说不如一票跨平台框架语言用得人多, 但也远远谈不上没落

在这个问题上, 个人认为 Microsoft 的原 CEO Steve Ballmer 难辞其咎, 在 Windows 霸主地位已经开始崩溃的时候 依然固执坚持封闭生态, 导致当时的 Net 开发者 无不焦虑和彷徨

不过 2014 年 Satya Nadella 接任 CEO 后, 微软 逐渐采取了 务实 开放 的做法, 收购 Xamarin 整合进 IDE, 推出 Visual Studio 社区版, C# 开始免费和跨平台, Microsoft 越来越像 Oracle, C# 越来越像 Java, 多多少少缓解了开发者的忧虑, 不少开发者开始回归, 毕竟 C# 优雅的语法 和 Visual Studio 卓越的开发体验 确实让人难以割舍

Net以前是不开源的,需要收费,有着各种版权问题,导致其语言生态发展不够。有其语言优点,但是从公司发展成本上来考虑,就注定不能作为首选。

PHP未兴起之前,很多公司使用net来开发网站,因为相比较java的JSP,开发效率也还是要高一些,这对中小型企业的业务快速变更升级很重要。JSP运行速度会快一些,但其需要编译的特点,开发速度会相对缓慢。而对中小型企业来说,时间就是金钱,开发速度太慢,跟不上业务发展是很致命的。

之后PHP应运而生,其语言设计的初衷就是为了快速开发web应用。完全的开源免费,开发效率非常高,甚至一个人就可以搞定一个项目。中小型公司,从发展之初的考虑,逐渐将PHP作为首选发展语言。

随着PHP生态的逐渐强大,net这种生态落后,开发速度比不上PHP,运行速度比不上JSP的语言也就逐渐没落了。

现在也有很多发展好了的公司,做大了做强了,又开始将自己的PHP项目往JSP迁移,因为开始追求运行速度。

所以PHP基本占领了中小型公司,而大公司则更多选择JSP。这都是语言的特性和优势决定的,将来如果出现一种语言能同时兼有开发速度和运行速度的免费开源的语言,那PHP和JSP也会逐渐走上net这条路。一切都是企业成本和效率的问题。

+++++++++++++++++++++++++++++++++++++

第一次写问答,没想到有这么高的阅读量。

有些人说我对net的认识太落后了,好吧,我开始学编程的时候,net确实是比较封闭的状态,这些年我也不再去关注net,对它的进一步了解也都是通过身边的同学朋友侧面反映的。

然后,真实情况是,我身边所有学net的同学都转行了。因为岗位少,薪资低,真的生存很艰难哩。

遥想当年,我们一个宿舍的同学(一群穷逼,只能住在学校破旧的8人大宿舍里,因为住宿费真便宜啊 ),开始讨论选某个语言作为今后学习方向。有人选择了net,有人选择了PHP,有人选择了JSP,然后各自努力。

现在,再来看彼此发展,net的同学都转行了,PHP的都在中小型公司,JSP的在平安保险这种大公司里。薪资待遇对比,net的同学和我们也有了差距。如果只看基本工资的话,还是PHP的高,哈哈。但是,加上年终奖就扑街了。我们同在深圳的经常一起出来聚聚,中小型公司的经常自嘲,辛辛苦苦一整年,比不上一个年终奖。唉,大公司年终奖是真多啊,可以顶你大半年甚至一年的工资,人比人气死人。

当然,学PHP也不是都好,有个同学受不了压力转行做SEO了。也不是所有学java都好,我现在公司的测试就是个学java找不到工作,转而当测试的。

其实问题还是经验,有多年工作经验,就是你找工作最好的敲门砖了。

最后,没有最好的语言,适应市场发展的语言就是好语言。

各位看官,不喜勿喷!

简单的说几句,就几句。我司用net做web,推送服务器,消息服务器,数据握手服务,cad应用二次开发,gis应用,各种手持设备应用,各种服务窗口用的终端应用,视频监控等等等,你还觉得php真的能打过net么?

个人的观点:

1、php肯定比不过net了,用他主要是网站那块而已。

2、net和Java,单纯从语言c#比java优秀,开源生态肯定是Java,效率是c#

3、net效率不高,在于windows平台,现在跨平台了,linux性能高于windows。

Net core 有一定的机会。

这个答案有几点:

1、运行环境成本问题,在net core出来之前,net

需要的运行环境搭设成本高,windows服务器正版上万,用access做数据库也需要几千元的正版office,虽说sql express是免费的,但是阉割的太厉害。所以一般win虚拟主机或者服务器都基本上比linux的贵,尤其是海外注重版权地区,更是差至少一半,所以造成了php大行其道,因为他的运行环境几乎零成本,而且服务器需要的配置可以很低,甚至128m内存就可以跑php程序。

2、开发环境成本问题,一样的毛病,code出来之前,开发net程序的工具首选visual studio,但是正版的也要几千上万,不是一般人承受的起的。而php和java的免费又好用的开发工具又很多,因此php又获得了先机。

3、学习成本问题,net之前,微软平台应用系列的开发需要太多,vb,c,c++,而网页脚本语言是基于vbscript的asp,随着系统的发展,这些需要和脚本逐步跟不上时代对敏捷开发、更复杂系统开发的需求,因此推出了aspnet和c#、f#,vbnet等语言,网页方面使用aspnet开发又一直升级,net 20,30,35,到现在的47x,每次升级都带来了新的概念,如今为了抢回份额,推出了net core 也是升级了好几个版本,所以net的开发要不断的学习,学习,升级,升级。而php就不一样了,版本的升级基本上都是框架内的升级,学习成本明显低于net

4、资源丰富问题,如上所述,由于成本问题,很多人选择了php开发,然后php的免费框架越来越多,程序员一般都懒,拿来修修改改就能上线,接着做下个项目就可以啦,而net明显没那么多免费框架,市面上分许多net框架是要授权费的。

不过目前微软的发力,也在着手改善这种问题,发布了visual studio code,visual studio community免费开发工具开发成本明显降低,net code跨平台语言只要版本符合要求linux系统也可以运行net code开发的程序了。如果能够有支持linux的文件型的数据库软件(例如office的access)发布就更好了。

做一个企业,最主要的目标是生存。活下来,才是根本目标,说好听一点,就是可持续发展。微软的生态圈大多收费,价格不菲,虽然从性能,入门,易用性来说,Net都好于Java领域,好于JSP和PHP,无奈中国市场竞争激烈,企业研发成本是首选考虑的因素,尤其是在中美贸易战的背景下,美国要加强知识产权保护的前提下,使用方用Net产品和服务就要支付昂贵的版权费用,让人承受不起。那么,免费开源的非Net体系,就会受到很多企业青睐,企业只要承担人工成本,不用过多支付版权费,是企业不得不考虑的方面。所以,现在使用什么技术,未来使用啥技术,是市场竞争的结果,要把握住这种趋势,才能占有先机。

前言

为什么跨平台是发展趋势?

同一个应用,各个“端”独立开发,不仅开发周期长,而且人员成本高。同时,作为技术人员,也不应该满足于这种重复、低能的工作状态。在这样的形势下,跨平台的技术方案也受到越来越多人和企业的关注。

本篇文章我将从原理、优缺点等方面为大家分享跨平台技术

一 H5

说到跨平台,没人不知道H5。不管是在Mac、Windows、Linux、iOS、Android还是其他平台,只要给一个浏览器,连“月球”上它都能跑。

1浏览器架构

下面,我们来看看让H5如此横行霸道的浏览器的架构:

浏览器由以上7个部分组成,而“渲染引擎”是性能优化的重中之重,一起了解其中的渲染原理。

2渲染引擎原理

不同的浏览器内核不同,渲染过程会不太一样,但主要流程还是一致的。

分为下面6步骤:

从以上6步,我们可以总结渲染优化的要点:

以上就是浏览器端的内容。但H5作为跨平台技术的载体,是如何与不同平台的App进行交互的呢?这时候JSBridge就该出场了。

3JSBridge原理

JSBridge,顾名思义,是JS和Native之间的桥梁,用来进行JS和Native之间的通信。

通信分为以下两个维度:

那么App内加载H5的过程是什么样的呢?

4App打开H5过程

打开H5分为4个阶段:

这四步,对应的过程如上图所以,我们可以针对性的做性能优化。

5优缺点分析

下面,我们进行H5的优缺点分析:

优点

缺点

虽然H5目前还存在不足,但随着PWA、WebAssembly等技术的进步,相信H5在未来能够得到越来也好的发展。

二小程序

2018年是微信小程序飞速发展的一年,19年,各大厂商快速跟进,已经有了很大的影响力。下面,我们以微信小程序为例,分析小程序的技术架构。

小程序跟H5一样,也是基于Webview实现。但它包含View视图层、App Service逻辑层两部分,分别独立运行在各自的WebView线程中。

1View

可以理解为h5的页面,提供UI渲染。由WAWebviewjs来提供底层的功能,具体如下:

每个窗口都有一个独立的WebView进程,因此微信限制不能打开超过5个层级的页面来保障用户体验。

2 App Service

提供逻辑处理、数据请求、接口调用。由WAServicejs来提供底层的功能,具体如下:

运行环境:

仅有一个WebView进程

3View & App Service通信

视图层和逻辑层通过系统层的JSBridage进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层将触发的事件通知到逻辑层进行业务处理。

4 优缺点分析

优点

缺点

既然WebView性能不佳,那有没有更好的方案呢?下面我们看看React Native。

三React Native

RN的理念是在不同平台上编写基于React的代码,实现Learn once, write anywhere。

Virtual DOM在内存中,可以通过不同的渲染引擎生成不同平台下的UI,JS和Native之间通过Bridge通信

1React Native 工作原理

在 React 框架中,JSX 源码通过 React 框架最终渲染到了浏览器的真实 DOM 中,而在 React Native 框架中,JSX 源码通过 React Native 框架编译后,与Native原生的UI组件进行映射,用原生代替DOM元素来渲染,在UI渲染上非常接近Native App。

2React Native 与Native平台通信

3优缺点分析

优点

缺点

4RN展望

虽然RN还存在不足,但RN新版本已经做了如下改进,并且RN团队也在积极准备大版本重构,能否成为开发者们所信赖的跨平台方案,让我们拭目以待。

既然React Native在渲染方面还摆脱不了原生,那有没有一种方案是直接 *** 控GPU,自制引擎渲染呢,我们终于迎来了Flutter!

四Flutter

Flutter是Google开发的一套全新的跨平台、开源UI框架,支持iOS、Android系统开发,并且是未来新 *** 作系统Fuchsia的默认开发套件。渲染引擎依靠跨平台的Skia图形库来实现,依赖系统的只有图形绘制相关的接口,可以在最大程度上保证不同平台、不同设备的体验一致性,逻辑处理使用支持AOT的Dart语言,执行效率也比JavaScript高得多。

1Flutter架构原理

2Dart优势

很多人会好奇,为什么Flutter要用Dart,而不是用JavaScript开发,这里列下Dart的优势

3优缺点分析

优点

缺点

以上就是关于VB.NET编程中调用Windows API全部的内容,包括:VB.NET编程中调用Windows API、能用标准的C语言做MFC的窗口程序吗吗、用什么软件开发windows窗体应用小程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10134628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存