Unix/Linux下的软件包生成器----EPM
摘要
在Unix/Linux环境下生成软件发行包是一个挑战,特别是你要发布一个跨多个平台的软件时,这项工作会变得更加艰难。因为每个 *** 作系统都有自己的软件包格式,而且每个 *** 作系统的软件开发环境都有不同的需求和实现。
(2002-08-22 11:01:14)
--------------------------------------------------------------------------------
By Wing, 出处:sword_martin
在Unix/Linux环境下生成软件发行包是一个挑战,特别是你要发布一个跨多个平台的软件时,这项工作会变得更加艰难。因为每个 *** 作系统都有自己的软件包格式,而且每个 *** 作系统的软件开发环境都有不同的需求和实现。
解决这个难题的方法之一是采用ESPPackageManager(EPM)-----软件包管理软件,它除了支持自身的“可移植(portable)”发行格式外,还支持厂家指定的发行格式,这样你就几乎可以为所有的UNIX/Linux平台的 *** 作系统生成安装软件包了。
EPM软件包管理软件是由ESP公司开发的,如果ESP---EasySoftwareProducts公司您还不是很熟悉的话,那么CUPS----unix环境下的通用打印系统您可就不能不知道了,EPM同CUPS一样都是为了方便用户在Unix/Linux环境下的使用:CUPS提供了一个Unix/Linux环境下的通用的打印系统,EPM则使得在Unix/Linux环境下软件安装包的生成更加简易方便。EPM的初期版本支持一种被称为“可移植”的软件包发行格式,它与任何特定的 *** 作系统或软件包生成软件的格式都不兼容,后来在EPM的第二个版本中又加入了生成支持某个特定Unix/Linux发行版本的功能。
一、EPM功能强大
现有开放源码的软件包生成系统有很多:在Linux下有RedHatPackageManager(RPM)及DebianPackagingsoftware(dpkg及dselect),在商业UNIX环境下有各个厂商支持的软件包生成系统。
但所有这些类型的格式都有一个缺点:不支持通用的软件标准文件格式。也就是说,Debian类型的软件包与Solaris的pkg软件包相互不兼容。这就使得管理多 *** 作系统的软件包十分困难。
以上几种格式均支持二进制的发行版本。RPM和Debian格式还支持源代码发行版本,用户可以重新编译进行安装。只有商业的UNIX格式支持patch----打补丁的发行格式,所以对RPM和Debian生成的软件包,升级时必须更新全部的文件。除了Solaris的Pkg格式外,其它几种格式在升级时都无需删除原先的老版本软件。
在创建软件包时,RPM和Debian一定要创建一个目录,将文件拷到该目录中,并设置其属主及文件权限。为了确保目录及文件的属主及权限正确,用户必须以root的身份创建软件包,这样做,会给系统安全造成潜在的安全,而且直接以root身份进行 *** 作也是违反相应的安全 *** 作规范的。如果软件包中包含了动态数据如数据库或交换数据会使得创建过程更加复杂。
商业UNIX格式使用软件文件列表将源文件设置为正确的目录及权限。这使得传输软件包中包含的动态数据、配置管理更加容易,同时由于用户不需要以root的身份进行 *** 作,也消除了潜在的安全问题。但这种格式的软件包都是专用的,不能在其它软件平台上使用。
前面做了这么多的铺垫,就是为了反衬出EPM的强大功能,现在我们来看看EPM的功能吧,它的功能可以概括为:
1、采用通用软件标准格式创建二进制软件发行包。即该软件包能在所有的 *** 作系统中进行安装。
2、在打包前可以去除可执行文件中的调试信息。
3、将源文件及目录转换到安装路径及权限。
4、支持配置文件及启动时的初始化脚本。
5、当替换已有文件时能够进行自动备份。
6、提供安装及卸载脚本,无需附加的软件就可以工作于所有的系统中。
7、允许对整个软件包进行升级或通过patch的方式进行升级。
8、支持软件包中的冲突共存、需求检测及替换。
9、支持网络安装,但/usr目录必须是共享的。
10、在GNU的GPL之下必须是开放源码的。
11、支持可移植的格式和厂商指定的格式。其接口可以方便的扩展,以支持新的格式。
12、提供了一个简单的GUI图形界面的安装程序,就象在MicrosoftWindows中的流行的InstallShield一样。
13、支持多种文件名的替换方法,使得在发行版本中重新命名及定位文件更加简易。
14、在源文件名中支持通配符。
怎么样,功能够强大了吧!EPM不仅能够生成通用格式的软件包,而且使用也很简单。
二、EPM的列表文件
EPM的列表文件描述了软件包所包含的文件信息,在生成软件包过程中要用到它。它是一个ASCII码文件,每一行都描述了产品或文件的相关信息。注释以字母“#”开头。其具体格式如下:
1、Productinformation(产品信息)
下面这个产品信息是EPM的列表文件中关于产品信息的部分:
#Productinformation
%productESPPackageManager
%copyright1999-2001byEasySoftwareProducts,AllRightsReserved
%vendorEasySoftwareProducts
%licenseCOPYING
%readmeREADME
%descriptionUniversalsoftwarepackagingtoolforUNIX
%version22
其中产品信息以由百分号%开头,属性名称后就是其属性值,其间有一空格。
2、Variables(变量)
EPM可以在列表文件中引入当前的环境变量,用户也可以自己定义新的变量。
标识符$用来定义变量,在$后定义变量名及其初值,如下所示:
$name=value
$prefix=/usr
$exec_prefix=${prefix}
$bindir=$exec_prefix/bin
在列表文件中定义的变量可以由命令行或环境中定义的变量重载(overridden)。该方法很灵活,它是一把双刃剑,所以建议慎用!
3、Files(文件):
下面列出的是EPM软件包中包含的文件列表:
#Executables
%systemall
f0555rootsys/usr/bin/epmepm
f0555rootsys/usr/lib/epm/setupsetup
f0444rootsys/usr/share/doc/epm/READMEREADME
f0444rootsys/usr/share/doc/epm/COPYINGCOPYING
f0444rootsys/usr/share/doc/epmhtml
#Manpages
%systemirix
f0444rootsys/usr/share/catman/u_man/cat1/epm1epm1
%system!irix
f0444rootsys/usr/man/man1/epm1epmman
%system指令在这里是个条件判断语句,用来确定 *** 作系统类型,依照不同的 *** 作系统将man文档安装到不同的目录中。
在每行的开头,分别由不同的字母代表不同的文件或目录类型:字母f指示出文件名,字母d后代表目录名,c代表配置文件名,I代表初始化脚本的文件名,l表示链接文件。在升级patch文件中,对要进行升级的文件用相应的大写字母标示。
每一行中还有其它一些数据字段,如:文件许可位、属主、组、目标文件名及源文件名。可以引用环境变量及从EPM命令行传送来的变量来指定源文件名及目标文件名。如:可以将man文件安装到由mandir变量指定的路径中,而不是原先由%system指定的路径:
#Manpages
f0444rootsys$mandir/cat1/epm1epm1
f0444rootsys$mandir/man1/epm1epmman
还可以使用通配符一次指定多个文件:
f0444rootsys/usr/share/doc/epmhtmlTop3 楼smallrascal(㊣小无赖㊣有事给我留言㊣)回复于 2003-06-23 08:29:59 得分 0 4、Directories(目录):用’-‘来表示目录下的所有文件:
d0755rootsys/foo/bar/dir-
5、ConfigurationFiles(配置文件):
配置文件与正常文件的使用相同。如果安装软件时有一个配置文件存在,新的配置文件就被存为filnameN,这样用户可以将其与老的配置文件合并。下面定义了CUPS的一个配置文件:
c0644rootsys/etc/cups/cupsdconfconf/cupsdconf
6、InitializationScripts(初始化脚本):
初始化脚本就在在机器启动时执行的一段脚本语言或一个程序,通常用来启动后台守护程序。在安装时,EPM能够自动检查到初始化文件的位置,所以它可以对不同的Linux版本进行设置。下面是CUPS设置的初始化脚本:
i0555rootsyscupscupssh
其中指定了初始化脚本的根名字为cups,源文件是cupssh。
7、SymbolicLink(符号链接):
如果你想在/usr/bin中做一个gzip的链接,起名为gunzip,语法如下:
l0555rootsys/usr/bin/gunzipgzip
8、ConditionalDirectives(条件指示):
前面我们用到了%system来选择安装man文件的路径。%system用来检查 *** 作系统的名字或版本是否与指定的匹配。注:可以由命令uname得到 *** 作系统的名称,获得 *** 作系统的版本号用uname–r命令。
%systemirix
在为IRIX系统创建安装软件包时,包含以下的文件。
%systemlinux-20
在Linux-20x的 *** 作系统创建软件包时,包含以下的文件。
%system!irix!linux-20
当不为IRIX和Linux20x创建软件包时,包含以下的文件。
%systemall
这条语句指定所有的 *** 作系统。
如果要对不同的软件包格式指定不同的文件,可以用%format原语:
%formatrpm
当创建RPM发行包时只包括以下的文件。
%format!rpm
不创建RPM包时包含以下文件。
%formatall
所有类型的软件包都包含以下的文件。
9、Conflicts,Replaces,andRequires
软件冲突和需求由%incompat和%requires原语指定。如果你的软件包在安装时替换了其它的软件,你可以用%replaces原语指定替换的内容。(当软件包的格式不支持包替换时%replace就被映射成%conflics)。
可以通过指定软件包的名称说明软件包的依赖性:
%requiresfoobar
%incompatfoobar
%replacesfoobar
也可以直接用文件名来说明软件包的依赖性:
%requires/usr/lib/libfoobarso
%incompat/usr/lib/libfoobarso12
软件包的依赖性检查只有对相同格式的软件包才强制执行,所以一个可移植格式的软件发行包,如果其需要“foobar”软件包,那么它只会查找已安装的可移植格式的”foobar”软件包。
三、用EPM构造软件发行包
1、用mkepmlist生成列表文件。
EPM提供了一个小程序---mkepmlist,用它来生成列表文件。其命令语法为:
mkepmlist[-ggroup][-uuser][--prefixdirectory]
directory[directory]
各参数的意义如下:
-g:将指定目录下的文件的组属主改为指定的组名。
-u:将指定目录下的文件的用户属主改为指定的用户名。
--prefix:指定目的路径。如果当前软件的目录在/opt/foo下,你希望创建软件包的安装目录为/usr/local,用该参数就可以了:
mkepmlist--prefix=/usr/local/opt/foo>foolist
这里用重定向符是为了得到foolist这个文件,因为mkepmlist将结果打印到标准的输出即终端屏幕上。
2、生成软件包。
构造软件包只需运行”epm”即可,比如要构造一个名为test的发行包,只需运行:
epmtest
EPM会自动的调用列表文件testlist,如果要指定列表文件,命令如下:
epmtesttestlist
第一个参数为软件包的名字,testlist为列表文件的名称。执行结果是生成一个包括了发行文件及安装脚本的tar压缩文件。
同时,在创建软件包时还可以给变量赋值,如下面指定了安装man文件的目录:
epmmandir=/foo/bar/mantesttestlist
EPM的-f选项还可以生成厂商指定的发行包:
epm–fformat…
format选项包括:
·depot或swinstall-HP-UX的软件发行包格式;
·dpkg-Debian的软件发行包格式;
·instortardist-IRIX的软件发行包格式;
·native-"Native"(RPM,INST,DEPOT,PKG等)的软件发行包格式;
·pkg-Solaris的软件包发行包格式;
·portable–默认的可移植格式;
·rpm-RedHat的软件包发行格式。
采用-f选项时,无需对列表文件做任何改动。例如为test创建一个RPM格式的发行包:
epm–frpmtest结果就生成了一个RPM格式的发行包。
四、后记
在完成本文时,我发现,其实InstallShield的产品系列中也有支持跨平台的版本,该版本的InstallShield又分为Enterprise、Professional和Express三种级别,分别满足不同用户的使用要求:其中Express级的产品是最初级的产品,用户无需做太多的设置就可以快速的生成安装文件;而Professional级的InstallShield还允许用户对安装进行更多的设置;最高级的Enterprise除了以上的功能外,更可以为象AS-400这样大型系统生成安装软件包。
怎么样,InstallShield是不是也做得很棒?但是,这一切都是要银子的,开放源代码就更不可能了。所以除非你对程序的安装界面有特别的要求或者软件安装平台是微软的Windows,那么EPM一定会是你最好的选择!
如果你有一定的计算机编程知识基础,那么很容易学;再如果你对编程十分感兴趣,那么很容易学的。
1,找到合适的入门书籍,大致读一次,循环啊判断啊,常用类啊,搞懂(太难的跳过)
2,做些简单习题,字符串比较,读取日期之类 Python Cookbook不错(太难太无趣的,再次跳过,保持兴趣是最重要的,不会的以后可以再学)
3,加入Python讨论群,态度友好笑眯眯(很重要,这样高手才会耐心纠正你错误常识)。很多小问题,纠结许久,对方一句话点播思路,真的节约你很多时间。耐心指教我的好人,超级超级多谢。
4,解决自己电脑问题。比如下载美剧,零散下载了2,4,5,8集,而美剧共12集,怎样找出漏下的那几集?然后问题分解,1读取全部下载文件名,2提取集的数字,3数字排序和(1--12)对比,找出漏下的。
对于python初学者来说,能找到一个好老师学习格外重要,这能决定你是不是可以做出好的项目,在python开发的路上越走越轻松,如果现在的你缺乏学习经验,找不到老师指导你学习,可以加企 鹅扣-Q前面112再加上中间的983以及最后四位数4903,连在一起就可以了。
5,时刻记住目的,不是为了当程序员,是为了解决问题。比如,想偷懒抓网页内容,用urllib不行,用request也不行,才发现抓取内容涉及那么多方面(cookie,header,SSL,url,javascript等等),当然可以听人家劝,回去好好读书,从头读。 或者,不求效率,只求解决,用ie打开网页再另存为行不行?ie已经渲染过全部结果了。 问题变成:1--打开指定的10个网页(一行代码就行)。更复杂的想保存呢?利用已经存在的包,比如PAM30(我的是Python3),直接打开ie,用函数outHTML另存为文本,再用搜索函数(str搜索也行,re正则也行)找到数据。简单吧?而且代码超级短。
6,保持兴趣,用最简单的方式解决问题,什么底层驱动,各种交换,留给大牛去写吧。我们利用已经有的包完成。
7,耐心读文档,并且练习快速读文档。拿到新包,找到自己所需要的函数,是需要快速读一次的。这个不难,读函数名,大概能猜到是干嘛的,然后看看返回值,能判断是不是自己需要的。
8,写帮助文件和学习笔记,并发布共享。教别人的时候,其实你已经自己再次思考一次了。 我觉得学程序就像学英文,把高频率的词(循环,判断,常用包,常用函数)搞懂,就能拼装成自己想要的软件。 一定要保持兴趣,太复杂的跳过,就像小学数学,小学英语,都是由简入深。 网络很平面,无数国际大牛著作好书,关于Python,算法,电脑,网络,或者程序员思路,或者商业思维(浪潮之巅是本好书)等等,还有国际名校的网络公开课(中英文字幕翻译完毕,观看不是难事),讲计算机,网络,安全,或者安卓系统,什么都有,只要能持续保持兴趣,一点点学习下去,不是难事。 所有天才程序员,都曾是儿童,回到儿童思维来理解和学习。觉得什么有趣,先学,不懂的,先放着,遇到问题再来学,效果更好。 唯一建议是,不要太贪心,耐心学好一门优雅的语言,再学其它。虽然Javascript做特效很炫,或提某问题时,有大牛建议,用Ruby来写更好之类,不要改方向。就像老笑话:“要学习递归,必须首先理解递归。”然后死循环一直下去。坚持学好一门语言,再研究其他。 即使一门语言,跟网络,数据库等等相关的部分,若都能学好,再学其他语言,是很快的事情。 另外就是,用学英文的耐心来学计算机,英文遇到不懂的词,抄下,查询。 python里,看到>
VB即Visual Basic编程语言
1991年,美国微软公司推出了Visual Basic(可简称VB),目前的最新版本是VB 2008 Beta2(VB9)中文版。
Visual 意即可视的、可见的,指的是开发像Windows *** 作系统的图形用户界面(Graphic User Interface,GUI)的方法,它不需要编写大量代码去描述界面元素的外观和位置,只要把预先建立好的对象拖放到屏幕上相应的位置即可。
Basic 实际上是一个短语的缩写,这个短语就是 Beginners all_purpose symbolic instruction code ,其中文意思为“初始者通用符号指令代码语言”。
Visual Basic 6 有学习版、专业版和企业版三种版本,以满足不同的开发需要。学习版适用于普通学习者及大多数使用 Visual Basic 开发一般 Windows 应用程序的人员,但是;专业版适用于计算机专业开发人员,包括了学习版的全部内容功能以及Internet控件开发工具之类的高级特性;企业版除包含专业版全部的内容外,还有自动化构件管理器等工具,使得专业编程人员能够开发功能强大的组骨子里分布式应用程序。
Visual Basic 是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。它简单易学、效率高,且功能强大可以与 Windows 专业开发工具SDK相媲美。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,以用动态链接库(DLL)、对象的链接与世隔嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。随着版本的提高,Visual Basic的功能也越来越强。50版以后,Visual Basic 推出了中文版,与前个版本相比,其功能有了很大提升。
但是,功能再强大,Visual Basic 仍然有一个缺点:在没有MSVBVMDLL的计算机上必须安装所需的DLL文件。用它可设计 *** 作系统,不过,比较困难。
在21世纪初,Microsoft 公司推出 Visual Studio NET 2003,它与 Visual Basic 之间有了重大变化,Visual Studio 为各种编程工具做了一个平台,Visual BasicNET 可在这种平台上运行。相对于传统VB,有很大的不同。VB Net,首次使用Net构架进行可视化编程,并且能很好地与COM构架兼容,Visual Studio NET 2003 应用 NET Framework 11 。
2005年 Visual Studio 2005 则运用了 NET 20 的技术,更加的方便了程序员的工作。可是新的程序对系统配置要求也较高,需要微软Net Framework 20以上的Net构架支持。
2007年12月,微软(Microsoft)推出了Visual Studio 2008 Beta 2 发生了重大的变化(见附图)在代码输入的时候,可以比VB2005快很多,在非特殊的情况下,VB2008都会自动开启 自动完成关键字 这个命令 而且支持最新的 NET Framework 35 SP1 Beta
VC即Visual Basic编程语言
一、VC是什么?学VC是学什么?
首先VC是一个软件(IDE集成开发环境)(编译、编辑、调试)
C和C++。但C++中的有些特性是不用的,例如I/O流,多态继承
WindowsSDK(软件开发工具)
VC的灵魂:MFC(微软基础类库)
ATL(ActiveX模板类库)
其他的SDK,如OpenGL,DirectX,ActiveMoive,DrawDib(WinG)
VC是许许多多技术的综合,就好像少林72般绝技,一般在应用中学会其中很少一部分就够了。我们的现在目的,其实不过是学一套少林长拳。这套长拳应包括:
1、养成一种严谨的软件开发习惯,熟悉软件工程的基本原则。
2、C语言基础
3、C++最基本内容:类、继承性、封装性、多态性的概念
4、如何用向导建立一个程序框架
5、设计菜单
6、设计工具条
7、设计和使用对话框,熟悉最常用的对话框控件:按钮、静态文本、编辑框等
8、知道怎样新建类、成员函数、成员变量、消息处理函数。
9、了解最常用的Windows消息:如WM_PAINT(重绘窗口),鼠标按下、d起、移动,初始化对话框,等。
10、了解最简单的GDI(图形设备接口):写文字、画框、画点、画线、画圆,设置画笔、画刷。
11、熟悉最常用的MFC类:
CWnd
CDocument
CView
CDC
CDialog
CWinApp
CGdiObject及子类
CString、CPoint、CRect、CSize等简单数据类型
CFile
以上提到的这些内容,是每个人都会用到的内容。
二、MFC简介
上述主要内容都是与实际 *** 作关系非常密切的,在此不可能讲清楚;而且,这些在一般的书里都会讲到。我主要将最重要的MFC介绍一下。
MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。
下面介绍最重要的MFC。
CWnd:窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。该类很大,一开始也不必学,知道就行了。
CDocument文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)
CView视图,负责内存数据与用户的交互。包括数据的显示、用户 *** 作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在里面,你打交道最多的就是它。
CDC设备文本。无论是显示器还是打印机,都是画图给用户看。这图就抽象为CDC。CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。
CDialog对话框
CWinApp应用程序类。似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数InitInstance():初始化。
CGdiObject及子类,用于向设备文本画图。它们都需要在使用前选进DC。
CPen笔,画线
CBrush刷子,填充
CFont字体,控制文字输出的字体
CBitmap位图
CPalette调色板
CRgn区域,指定一块区域可以用于做特殊处理。
CFile文件。最重要的不外是Open(打开),Read(读入),Write(写)
CString字符串。封装了C中的字符数组,非常实用。
CPoint点,就是(x,y)对
CRect矩形,就是(left,top,right,bottom)
CSize大小,就是(cx,cy)对(宽、高)
三、用好MSDN和例子
作为提高,推荐看的例子有:
nHello最简单的程序框架
nScribble鼠标绘图。教程:编程基础,GDI
nDiblook图像处理最简单范例
nMFCIE因特网浏览器
nEnroll数据库
nDaoviewDao(数据访问对象)范例。树型和列视控件
nCubeOpenGL范例,画一个不断旋转的方块
nHierSvrOLE服务器
nOclientOLE包容器
nDrawcli鼠标绘图。也包括OLE。
nWordPad写字板。OLE
四、几点经验
A为什么要用Windows而不是DOS编程
Windows编程并不比DOS编程难很多,只是在刚刚接触的时候感到头绪繁多,不知从何下手。实际上,如果你会C语言,你会发现Windows编程的难度并不比当年学C语言时大。DOS编程要想成为高手,也需要学习几百个函数(无论是TC、BC、MicrosoftC),并要深入了解汇编语言级的DOS功能调用。而现在在Windows下,付出相同的工作量,你却可以获得几倍的收益。如果你以前熟悉DOS编程,现在再搞Windows编程,只要两个星期肯定会感到巨大的优越性:在DOS下,每一件事都要自己干,而且还有64K内存、显示精度等的限制,实在是事倍功半了。
B为什么要用VC而不是其他Windows编程语言
n大多数大型软件(包括Windows自己)都是用C、C++编的,所以可以利用的源代码特别多。例如Photoshop,就有VC的编程接口。的其他的语言都不如VC有历史优势。而且VC的开发工具特别多,从控件公司到硬件开发商,其产品很少敢不提供VC接口的。
nVC适合组织大工程(VB就不行)
nBorlandC++或C++Builder也很不错,并不比VC差。但BC的版本兼容性不好,从31到40就出现“代沟”,而且VC提供了极为丰富的文档和范例,VC的参考资料也远比BC多。并且VC与其他的VisualStudio成员可以协调工作,对软件工程有利。
n
C开始不要学WinAPI编程,但以后最好学学WinAPI
特别要注意,开始不要买讲WindowsSDK编程的书。一个臭名昭著的例子就是“HelloWorld”。各种计算机语言在入门课中往往都给出一个例子,显示一行文字“HelloWorld”,无论是在Basic、C、Pascal,甚至汇编中,这个最简单的小程序都几行就可以写完。但在早期的Windows编程中,刚才讲到的“HelloWin”这个有名的例子就要组织一个工程、写上几百行代码才能实现。这就吓跑了很多想学Windows编程的人。实际上,在Windows下显示“Helloworld”,最简单的方法只要5行就够了:
#include“windowsh”
voidWinMain()
{
MessageBox(NULL,”HelloWorld!”,”MyFirstWindowsApplication”,MB_OK);
}
当然这个程序只建立了一个最简单的对话框,但这已经够了。
如果你没有SDK编程的经验,学VC就是要利用MFC绕过Windows编程的许多细节。有好的工具为什么不用呢?现在你在VC写一个”HelloWorld”,只要写一行代码就可以了。
voidCYourView::OnDraw(CDCpDC)
{
//……其他的代码
pDC->TextOut(100,100,”HelloWorld!”);
}
但MFC不是万能的,WinAPI和VC中有很多功能在MFC中并不能反映出来。在入门后,要想发挥VC的完全能力,WindowsAPI还是非常重要的。而且,这些API在其他Windows语言中也用得到。
学语言,与练武道理也差不多。VC、VB、Dlphi、VFP,以及其他的Windows编程语言,都属于同一个门派:Windows门,虽然招式不同,但内功都是一样的,这就是WindowsAPI(应用编程接口),大概是两千个函数。任何武功,招式即使再复杂,通常也能在很短时间内记下来;但内功就不是一朝一夕的事。而且,各门派的内功不同,Unix、Linux门有Uinx的内功,Apple(苹果)门有Mac的内功,Java更是自成一派。我们这里说的学VC,只是学招式,学招式一个月差不多就够了,聪明的两个星期就可以掌握。光学招式,吓唬人是够了,但和高手一过招,非出丑不可。要想精通VC,必须熟悉WindowsAPI。
6模拟效果:对于模拟游戏能不能运行是很重要,但出来的效果怎么也是同样重要的,对于这方面我分为几个方面评价:
1)画面:这方面显然twsfc又输给pocketSNES了,pocketSNES出来的画面效果跟电脑基本无异,如果能show出同级生2的图来的话大家可能就要买吃红桃k喝了,另外其他一些经典游戏,好象最终幻想、saga、勇者斗恶龙等都有惊人的表现;twsfc是横屏显示,有很多游戏运行中出现贴图错误,画面上经常有几块马赛克,偶尔还出现人物和头像不吻合的现象,不过还好,最终幻想4、大航海时代那几个我常玩的游戏基本没什么问题,算是凑合吧。
2)速度:在ce上运行模拟器,最令人担心的方面就是游戏的运行速度。这方面就是twsfc的价值所在了。twsfc能在我的ipaq上正常运行的游戏的速度都非常令人满意,甚至比原来游戏速度还快,估计即使在速度较慢的机器上也能得到较佳的运行速度。这可能是由于twsfc的作者sukon的掌上电脑速度比较慢,所以在这写程序的时候在这方面下了点苦功有关。至于pocketSNES嘛,在我的ipaq上的速度仅仅是能接受而已,每秒一般仅有几帧到十来帧,停滞感很强,玩slg和rpg还说得过去,玩动作游戏的话真的是受苦呀。不过这也可以理解,pocketSNES可能为了完善功能而牺牲了速度,不过我个人认为pocketSNES应该还有提升的余地。
3)控制:pocketSNES由于既可以对按键设置,又可以用模拟按键,所以可以根据游戏和个人习惯做调整,这方面做的比较体贴。twsfc既没有按键设置又没有用模拟按键,而且是横屏显示,B键放在ipaq的录音键上, *** 作起来真的有点不舒服。
4)声音:pocketSNES和twsfc都声称加入了声音的模拟,可是我真的始终没在游戏上听过一点声音,是否我的 *** 作有误还是其他原因,知道的朋友请告诉我。
5)其他:pocketSNES对super fx、dsp1、c4等芯片提供的特殊效果都有进行模拟,这也是它为什么能运行那么多的rom的原因之一,同时也说明pocketSNES有运行3D游戏的能力。至于twsfc这方面是一片空白。
7bug:pocketSNES无论功能和效果都比twsfc强,不过真没想不到bug也比twsfc多。前面提到的声音问题算是一个,另外运行游戏过程经常出现按键失控,突然一个劲的往左或者往右移动,虽然过一会就恢复,但是这问题实在对游戏过程影响很大,再一个问题是pocketSNES很容易与其他软件出冲突,我装了几个软件后就出现某几个rom无法运行的情况。twsfc的问题主要在显示方面,马赛克、错位这是经常会出现的,另外load了一个rom以后无法释放内存,必须退出才能再运行别的软件,这一点也很讨厌。
8综合评价:由于pocketSNES是由SNES 9x上发展过来的软件,从各方面可以看出它一个成熟的软件,如果能修补那些讨厌的bug和提提速的话,堪称完美;twsfc虽然有很多缺陷,但是速度快是其最大优点,特别是一些较慢的pda上,现在只有它能实现真正玩超任游戏,但对于软件本身发展的路途还是比较遥远。
pocketSNES模拟度:80%
twsfc模拟度:60%
比翼双飞
拼音: bǐ yì shuāng fēi
解释: 比翼:翅膀挨着翅膀。双飞:成双的并飞。比喻夫妻情投意合,在事业上并肩前进。
出处: 《尔雅·释地》:“南方有比翼鸟焉,不比不飞,其名谓之鹣鹣。”
举例造句: 不是妾身多薄幸,只因司马太风骚,效神凤,下丹霄,比翼双飞上泬寥。 ★明·朱权《卓文君》
拼音代码: bysf
近义词: 比翼齐飞、并驾齐驱
歇后语: 成对的蝴蝶
灯谜: 双飞燕
用法: 作谓语、宾语、补语;用于夫妻或情侣
英文: pair off wing to wing--said of inseparable lovers
VC 是风险投资
=Venture Capital
是最近几年最风行的词语!
其他解释包括:
Visual C++ 微软的编程工具
Vitamin C 维生素C
以上就是关于pkg是什么文件的资源全部的内容,包括:pkg是什么文件的资源、如何成为Python高手、编程中VB跟VC指的是什么 请详细说清楚...等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)