Qizhen's profileLabVIEWPhotosBlogListsMore ![]() | Help |
LabVIEWLabVIEW工程师的生活
文章安内容分类
O Troupe of little vagrants of the world, leave your footprints in my words.
Qizhen Ruanwrote:
回Jie Wang:
我没有使用过MatLab,所以不太好对他俩进行比较。LabVIEW的mathscript遵循的语法与MatLab应当是同一个,所以它俩写出来的程序应该是相同的。 LabVIEW主要还是在工控测试领域中应用,其它行业的工具包的确没有MatLab多。mathscript只是LabVIEW以下部分,我觉得LabVIEW最具特色的还是它的图形化编程方法。
5 days ago
Jie Wangwrote:
What do you think about LabView when comparing with MatLab? LabView seems a good one for signal processing and measurement, and instrument simulation. LabView uses the same mathscripts from MatLab. MatLab has a huge amount of various toolboxs from engineering, bioinformatics to finance. Personally, I think LabView is still specialized in instruments. It would be a very long way if NI wants it to be generalized.
June 25
Jie Wangwrote:
Hello, come here when googling LabView in Chinese. You make a very good site! I am a professor of Computer Science. However, this Summer I am teaching LabView for Mechanical Engineering students. I have to learn it and teach it at the same time.
June 25
Yuan Pengwrote:
阮老师,您好!我在调用visa函数做串口通信时,在没有接外部设备,而只是把电脑上的两个串口连起来,相当与从一个端口发送出去而从另外一个端口接收,怎就通信不了?是不是labview做的串口只针对和PCI-232这些设备通信?
这个我试过 一台PC作为发送端,负责串口的写数据,另一台作为接收端,负责读数据,安装了VISA后用串口函数很容易实现的。
June 14
Qizhen Ruanwrote:
我没试过把两台电脑连在一起,可能串口有服务端和客户端区分的,如果两台电脑相连,需要把一台电脑改为客户端。
June 13
Qizhen Ruanwrote:
June 13
莉莉 古wrote:
阮老师,您好!我在调用visa函数做串口通信时,在没有接外部设备,而只是把电脑上的两个串口连起来,相当与从一个端口发送出去而从另外一个端口接收,怎就通信不了?是不是labview做的串口只针对和PCI-232这些设备通信?
June 12
俊杰wrote:
控件说明上面也是这么说的,但在labview中我还是不太会实现。您看这样做可以吗:在程序面板创建一个数组,然后用索引数组引出一个内容连至lpDataBuffer,这样对吗?我像看看数组传递的例子,请问阮老师哪里可以找到?谢谢!
June 12
Qizhen Ruanwrote:
在LabVIEW中没有指针的概念。你可以像VB一样,先造一个数组,然后把数组传递给它。
June 9
俊杰wrote:
阮老师,您好,向您请教一个问题。我在用labview调用ocx控件进行对数据采集器的编程,数据采集结束后要用一个函数进行读取采样结果,控件的说明是这样的:
long ReadSamplResult(long* lpDataBuffer, long size):读取采样结果 lpDataBuffer:采样结果存放指针,在C语言中,可以传递一个指针给该参数,在VB中,需要先声明一个数组,然后将该数组的第一个值作为参数传递给该参数。 Size:传递的数组大小。如果该值大于仪器内部的RAM的大小,则超过RAM部分的值都会是0,如果小余RAM的设定值,则该函数不能读取完,只能读取size的大小。剩下的部分不能再次读入了。 返回值:返回最后读取到的数据个数,读取失败返回0或者FALSE 我在labview中该如何实现呢?谢谢了
June 8
Boone Luwrote:
欢迎阮老师来QQ群:13267790指点。
May 8
Boone Luwrote:
哈哈哈,有点偷梁换柱的意思。
谢谢!
May 8
Qizhen Ruanwrote:
Boone Lu,使用LabVIEW制作的安装包可能没有这个功能。你可以改用专业的安装包制作软件来制作安装包。
如果不能使用专业安装包软件,也可以这样: 假设你程序运行时需要用到 foo.access 这个文件,在安装时,给它改个名字,比如安装的文件叫做access.bak。当程序运行时,先检查是否有 foo.access 这个文件。如果有,则继续运行;如果没有,则把 access.bak 这个文件拷贝一份,命名为 foo.access。
May 7
Boone Luwrote:
阮老师,你好!我在安装时遇到个问题:我的项目里包含了一个ACCESS的文件,用来保存测试记录的,当我重新安装时数据库文件会被覆盖掉,有什么解决办法吗?
陆迅海
May 6
Qizhen Ruanwrote:
运行过程中不可以改变控件方向。
实现你说的功能比较简单:使用一个控制控件,需要让它显示数据时,把值赋给控件的局部变量就可以了。
May 5
莉莉 古wrote:
阮老师,你好,我最近学习Labview遇到了一个问题想向你请教.Labview在程序运行时是不可以把一个控制控件改为显示控件的,但我现在想让一个控件既可作为显示控件又可作为控制控件,有什么办法啊?我看了Labview自带的例子,可以做一个这样的Xcontrol控件,除了这个方法还有更好的方法没有啊?
Apr. 20
莉莉 古wrote:
你好,最近看了你写的关于Labview文章,让我这个Labview初学者受益匪浅,很是期待你的书早日出版。
Apr. 18
lingzhiwrote:
哦,谢谢你的指点。
Apr. 10
Qizhen Ruanwrote:
不过,你可以把这XControl的数据类型定义为某个类,需要处理的各种数据类型全部封装成它的子类。这样,这个XControl就可以处理多种不同的类数据类型了。
Apr. 10
Qizhen Ruanwrote:
不可以,只能使用一种数据类型。
Apr. 10
lingzhiwrote:
Qizhen,你好。目前我所知道的用xcontrol实现的组件接口是单输入的,我想问一下,组件接口可以是不同类型的多输入吗?如果可以,是否有案例?
Apr. 10
Qizhen Ruanwrote:
具体时间我也不能确定,不过还要等几个月吧。
Apr. 8
Hongyan Wuwrote:
你好呀,请问你的书什么时候出版呢?很想看看呢~~
Apr. 7
Qizhen Ruanwrote:
Hi wen, I'm sorry, but I can not check your coursework. I don't have enough time and I don't familiar with your course. I think you'd better ask your tutor to check it.
Mar. 11
Qizhen Ruanwrote:
数据采集肯定需要使用硬件的。
LabVIEW只能实现数据采集后,对数据的处理工作。比如分析、显示等。
Mar. 11
|
Express VI 2 - 工作原理普通的子VI有前面板和程序框图。子VI前面板上的控件定义了这个子VI所使用的参数;程序框图上的代码实现了这个子VI的功能。在某个VI程序框图上,双击一个普通子VI的图标,可以打开子VI的前面板;按住Ctrl键再双击子VI的图标可以同时打开它的程序框图。 Express VI 的行为与普通子VI有所不同:在程序框图上双击一个Express VI的图标,弹出的是一个配置对话框。应用软件中的大量普通子VI都是有程序员自己开发的,因此,他需要打开子VI的前面板与程序框图进行编辑。而Express VI通常是LabVIEW或LabVIEW工具包自带的,不需要普通程序员去创建或修改一个Express VI,因此程序员一般也不需要看到它内部的代码。一个Express VI 通常会集成多种功能,因此程序员在使用它时,需要方便的打开Express VI 的配置对话框,根据自己的需要,选则适合的配置参数。 普通的子VI的程序框图等被保存在一个.vi文件中,而你是看不到程序中使用到的某个Express VI的.vi文件的。对于普通子VI来说,不论在应用程序的哪个地方调用它,或是哪个应用程序来调用它,所执行的代码都是相同的,就是保存在.vi文件中的程序框图。对于Express VI来说,却不是这样。程序员可以修改Express VI配置对话框中的内容,配置一旦被改变,Express VI的执行代码也会发生变化。因此,在不同的地方调用同一个Express VI运行的代码却可能是不同的。这也就决定了Express VI的程序框不不能被保存在单一的一个.vi文件中。实际上,Express VI的程序框图是被保存在调用它的VI的.vi文件中的。比如说某个VI名为A,它被保存在A.vi中。A调用了一个Express VI,B。则B的程序框图也被保存在A.vi中。只不过咱们没办法直接看到B的程序框图。 有些Express VI是允许用户查看其程序框图的(有些不提供这一功能)。在一个 Express VI 的右键菜单中选择“打开前面板”,LabVIEW会把Express VI转换成不可配置的普通子VI,这样它就有了可以打开的前面板和程序框图。 以“从动态数据转换”Express VI 为例(函数选板“Express –> 信号操作 –> 从动态数据转换”)。在某一VI的程序框图上放置两个“从动态数据转换”Express VI,分别命名为“数据转换1”和“数据转换2” 。对“数据转换1”Express VI的配置是“结果数据类型”为“一维波形数组”,如图1所示。 把Express VI 转换为普通VI并常看其程序框图,如图2所示。 这个Express VI 的程序框图由一个简单的子VI构成,如图3所示 对“数据转换2”Express VI的配置是“结果数据类型”为“二维标量数据”;标量数据类型为“布尔”,如图4所示。 使用同样方法打开“数据转换2” Express VI 的程序框图,可以看到,它与“数据转换1” 的程序框图完全不同,因为它们实际上需要完成不同的功能。 Express VI 1 - 什么是 Express VILabVIEW自带的子VI中有一些VI的图标看起来与普通子VI的不太一样,这就是Express VI。大部分Express VI可以在函数选板“Express”中找到。 从函数选板上直接就可以看出哪些VI是Express VI,它们的共同特点是图标周围有一圈浅蓝色的边框。如图1中的“时间延迟”和“已用时间”VI。 Express VI在使用时,也与普通VI有些不同。Express VI通常都配有一个配置对话框(图 2),用于设定Express VI运行时用到的一些数据,因而不必再在程序框图上输入数据。这就大大简化了程序框图。Express VI的功能通常都比一般的VI强大,某些常见的简单程序,譬如基本的数据采集显示程序,仅需使用几个Express VI就可以实现。加之使用它编程也比较简单,所以得名“Express VI(中文直译快捷VI)”。 Express VI的功能强大、使用便捷,但付出的代价是效率较低。应用程序的功能可能比较简单,但是它所调用的Express VI中却包含了大量应用程序根本用不到的功能。这部分功能既占用内存空间,又会影响程序的运行速度。所以,对于效率要求较高的程序,不适合使用Express VI。 内容补充和注释在本书完稿后,我仍然会坚持记录一些使用LabVIEW的经验。这些文章可以作为对书中内容的补充。此外,如果书中某些段落解释的不够清晰或详细,我也会在此针对那些薄弱环节追加一些文字。
鼠标配合Ctrl键的妙用LabVIEW中有众多的快捷键,这些快捷键可以大大加快编程速度。不过记住这些快捷键本身也是个挑战,比如说我吧,我只能记住几个最常用的快捷键,比如 Ctrl+C,Ctrl+V 等。我编程序主要还是依赖鼠标,单一个鼠标应付各种工作还是显得有些吃力的,编程速度可能没有熟练使用快捷键那么迅速。编的程序多了,不经意间就发现了一些鼠标配合Ctrl键的妙用,于是就把最有用的几种用法记录下来了。 复制对象在前面板或程序框图上选中一个或多个对象(控件、接线端、函数等),然后拖动鼠标到另一个位置。这时如果按下Ctrl键,光标的箭头旁就会出现一个加号,表示这时的操作变成的复制,而不再是移动对象了。先松开鼠标,再松开Ctrl键,就会在光标的新位置上放置一个选中对象的副本。这种复制对象的方法比使用 Ctrl+C,Ctrl+V 还便捷。这个方法还可以复制一些使用 Ctrl+C,Ctrl+V 无法复制的对象,比如对控件的属性节点和调用节点。 先按下Ctrl键,再按鼠标选中一个对象,然后拖动它,也可复制这个对象。先按下Shift键,再按鼠标选中一个对象,然后拖动它,也有特定的功能。它可以使得对象只在完全水平或者垂直的方向上移动一个对象。如果同时按下Ctrl和Shift键,再按鼠标选中一个对象,然后拖动它,就是把前两项功能合用:在当前对象的正上下或左右方复制一份新对象,这有利于直接编写出整洁的代码。 拓展程序框图空间有时候编着编着程序,就发现,需要在当前程序框图的某处插入一些额外的代码,而这里已经挤满的节点,在没有额外空间容纳新节点了。这时,可以按下Ctrl键,再在需要放置新代码的地方按下鼠标,拖动鼠标拉出一块矩形区域。松开鼠标,程序框图会自动把代码向周围拖动,空出这块区域用于放置新代码。 比如图3中的程序,需要在程序最中央位置,“Play One”常量的左侧腾出一块控件放置新代码。这时,按下Ctrl键,再在这一位置点击鼠标左键,然后拖动,拉出合适大小的一个方块。松开鼠标,这个方块的位置就空出来了,原来的代码被挤到旁边去了(图4)。
直接打开子VI的程序框图在程序框图上,鼠标双击一个子VI,会打开这个VI的前面板。实际上,对于子VI来说,我们通常不关心它的前面板,而是需要查看它的程序框图。如果按住Ctrl键,再双击程序框图上的一个子VI,就可以直接打开这个子VI的程序框图了。 调换函数输入参数的连线图5中程序有一个加法函数,它的两个输入数据线相连。但是这两条线出现了交叉,如果能交换一下它们的位置,程序会显得整洁不少。这时,先把鼠标移动到加法函数的输入参数接线端上,再按下Ctrl键,光标会变成一个倒着的“&”符号的形状。松开鼠标,这两个输入端的连线就会交换位置,交换位置后的程序如图6所示。这个方法只对有两个输入参数的函数有效。 翻看选择结构、事件结构、层叠式顺序结构的页面以选择结构为例:它每次只能显示一个页面,也就是一个条件处理分支。如果需要查看下一分支或上一分支的代码,可以把光标移动到条件结构内部的空白处,按下Ctrl键,然后滚动鼠标滚轮。每滚一下,条件结构就会切换显示一页。 《我和LabVIEW》内容介绍本书特点近几年,随着LabVIEW在中国的普及,市面上与之相关的书籍也越来越多。不过它们多以介绍LabVIEW的函数、VI的功能为主。比如,列举一个VI的功能为何,它的参数有哪些,表示什么含义等。而本书则更加侧重于介绍如何解决问题,比如针对一个具体的编程问题,本书会介绍LabVIEW中有哪些可以实现的方法,各自优缺点是什么。 本书的内容都是我在学习和使用LabVIEW过程中积累的经验。受写作时间和个人能力的限制,本书并没有覆盖LabVIEW所有细节内容和功能,也没有详细解释书中所使用到的LabVIEW自带VI或函数的参数设置及用法。不过这些内容在LabVIEW的帮助文档中均有详细介绍,所以在阅读本书时,若对某些具体的函数有疑问,可以打开LabVIEW,查阅相关的帮助文档。 内容选取在写作本书前,我陆续在博客上发表了多篇关于LabVIEW编程的文章。本书大约有三分之一的内容直接选取了博客上的内容。在把它们编辑成书的过程中,我又对它们进行了重新编辑和扩充。博客文章在介绍某些知识点时,面向的是是有经验的LabVIEW程序员,所以讲解并不详细。在本书的写作过程中,考虑到LabVIEW初学者也可能参考本书,所以对知识点的介绍更加细致。书中其余三分之二的内容则是完全新写的。 在具体选择书中内容时,主要偏重如下几部分: LabVIEW中最常用的功能。本书所介绍的内容都是LabVIEW编程者最经常使用到的功能。随着LabVIEW版本的更新,其功能也越来越多,有一些功能是极少被使用到的。这些偏僻的功能对于大多数读者帮助不大,所以本书也未做讲解。况且,目前市场上已经有过多本比较详细介绍LabVIEW控件、函数使用的中文书籍,本书就没有一一详细介绍这方面的内容。 LabVIEW学习过程中的常见问题及易犯的错误。我曾经作为LabVIEW高级课程的讲师,给客户讲授过LabVIEW的课程,也经常在博客、论坛或通过Email解答过LabVIEW使用者们的一些疑问,在公司内部,也经常检查和指导新员工改进他们编写的LabVIEW程序。在这一过程中,我发现有些问题在LabVIEW初学者中出现的频率相当高。指正这些通病可能会使更多读者收益,所以本书有相当部分篇幅用来讲解这方面的内容。 我个人所擅长的领域。为了保证本书的质量,本书所介绍的内容都属于我比较了解的范畴。而我平时接触不多、没有太多实际经验的部分,则不是本书涉及的范围。 尽量不重复LabVIEW帮助文档中的内容。LabVIEW的帮助文档应当是最全面、最权威的LabVIEW工具书,它记载了LabVIEW中每一个函数、VI的使用方法,每一个对话框上的内容……对于这些可以在LabVIEW帮助文档中直接查阅到的内容,本书就不再重复描述了。那些LabVIEW帮助文档中没有涉及到的内容,如LabVIEW程序设计的原理、原则,如何选取最适合当前情景的编程方法,编程时的注意事项,LabVIEW的学习方法等等,才是本书着重介绍的内容。 列举实际案例。在介绍LabVIEW的功能和用法时,书中会配合编程实例进行讲解。 LabVIEW版本书中介绍的LabVIEW功能和编程方法,是以LabVIEW 8.6专业版为范本的。这是在本书写作时LabVIEW的最新版本,也将是今后一段时间内,使用最为广泛的LabVIEW版本。本书侧重介绍的是那些最为常用的功能,所以书中绝大部分内容同样适用于更早版本的LabVIEW。 当本书出版时,也许更新版的LabVIEW已经面世了。但是,LabVIEW的编程思想不会有任何改变,并且新版本的普及也需要较长一段时间。所以即便读者使用的是新版本的LabVIEW,同样可以使用本书作为学习LabVIEW的参考书。 如果新版本的LabVIEW有较大改进,导致本书介绍的内容不再适用时,我将会在个人博客中,及时更新,进行详细的解说。 插图和示例为本书编写的示例和以及在书中截取的大部分插图是在LabVIEW 8.6中文版下编写和截取的。但受条件限制,有小部分示例和插图是在旧版本的LabVIEW,或英文版的LabVIEW中制作的。书中部分插图在Windows XP系统下截取,部分在Windows Vista系统下截取。因此,书中不同截图窗口风格可能略有不同。 受篇幅的限制,本书一般只收录一些关键设置和程序关键部分的截图。没有收录的程序框图,读者在学习本书时可以自己尝试编写,也可以直接下载本书的示例辅助学习。本书所用到的全部示例,包含插图中出现的VI,都可以从网上下载到,具体下载地址可参考我博客中的链接。 更正和注解受本人水平所限,在编写此书的过程中难免会有疏忽和差错。在此,诚挚希望各位读者及时批评指正书中纰漏,也欢迎读者就书中内容进行讨论。对本书的任何意见和建议都可以直接发表在我的博客中。 本书出版之后,我会继续对其进行维护,包括修订错误、补充相关内容、回答读者疑问等。所有相关的更新也都会及时发布在我的博客中。 相关链接: 控件的闪烁属性LabVIEW论坛、博客和群如果在学习过程中遇到问题,可以考虑通过互联网来寻求帮助。把相关的问题张贴在相关的论坛或高手博客上,便可得到别的的帮助。 论坛
MSN和QQ群
博客(注释内容引自“虚拟仪器技术文摘”博客)
初读《大话设计模式》昨天把新买的《大话设计模式》翻了一下,发现它在介绍面向对象编程时居然使用了和我同样的例子。我在《我和LabVIEW》中使用的一个例子是编写程序让一只小狗叫一声,再让一只小鸡叫一声;《大话设计模式》是让小狗和小猫叫一声,而它又注释说这个例子改变自《编程的奥秘》一书。看来大家的想法经常是会有类似的。这本书的作者也是先在博客上发文章,受到大家欢迎后才整理成书的。 初看《大话设计模式》这本书,觉得他写的还是相当不错的。我以前买过两本设计模式方面的书,不过它们都是理论性太强,看起来太累,所以都只看了一点就放弃了。新买的这本书一是语言比较通俗,二是讲解方式增加了不少娱乐性,读起来没那么枯燥了,这次终于有希望把设计模式看完了。 《一生的理财功课》读后感 这绝对算不上一本优秀的书,所以没几天我就把它翻看完了。书中主要是在介绍一些基本的经济知识,没什么作者的创新思想。不过看完一本书能想明白一两个问题,也算是没白看了。我看完这本书,唯一想明白了的一个问题就是“通货膨胀对富人的影响大还是对穷人的影响大?”。 我上次去书城的时候,正好看到这本《一生的理财功课》摆在一摞书最上面,所以就顺手买来了。最近业余时间充裕了,所以今天又逛了一趟书城,买了两本书来看,都是专业相关的。一本《算法导论》,一本《大话设计模式》。可是不知道有没有毅力把它们都看完 《我和LabVIEW》的写作过程我刚踏上工作岗位不久,父母就鼓励我把日常工作中的经验教训和心得随时记录成文。一来可以总结经验教训,二来可以与人分享。当时我总觉得自己经验有限、文思笨拙,又加之比较懒惰,所以迟迟没有行动。 大约三年前,公司几个同事鼓动我一起写书,赚点外快。我们对当时市面上的LabVIEW书籍以及它们的销售情况都进行了分析。结论是,撰写LabVIEW方面的书籍,并不会取得很好的经济收益。所以几个同事渐渐对写书失去了兴趣。不过,对于我来说,最大的吸引力在于写书带来的成就感。因此我并没有马上放弃这个念头,开始认真研究写书的可能性。 2008年夏,北航出版社的胡晓柏老师,给我展示了他们的一个出版计划。我觉得他们的计划和设计非常好,如果能参与其中也不错。而我太太此时也积极鼓励我,于是我又动了出书的念头。虽说当时写博客只有两年多,积累的文章还不算丰富,但我觉得第一次写书也不必过分追求完美,不需要一下子就写部大著作出来,先把一部分经验总结出版,也是个不错的开端。 写书过程中大事记:
《第十三楼》观后感最近虽然工作时间还是一样忙,不过下班总算不用再写书了,所以一下子轻松不少。终于可以安安心心的看几部电影了。电影中我最喜欢看的是科幻电影,我喜最欣赏想象力丰富的故事,科幻电影通常都充满各种奇思妙想。昨天看了一部影片叫做《The Thirteenth Floor》的电影,中文翻译为《异次元骇客》或《第十三楼》。 电影中的男主角是一家软件公司(公司在一栋大楼的第13层)的技术骨干,跟着老板一起开发了一套游戏软件。游戏玩家可以身临其境的进入到1937年的世界中,游戏中每个人物都和真实世界的一模一样:有感情、有思想。公司老板是第一个开始尝试此游戏的人。他在不断往返于真实和虚拟的世界的过程中,发现了一个不应被他知道的秘密。他深知此秘密事关重大,自己可能因此而被灭口,于是在虚拟的1937世界中,给男主角留下了一封信。之后,老板果然被杀,男主角为了找到真凶,进入了虚拟的1937世界。 俺们软件行业有句著名的话:“Software has bugs.”。电影中主角和他老板编写的这套虚拟游戏也同样充斥着各种漏洞,最糟糕的是其中一个漏洞被1937虚拟世界中的一个酒店职员发现了。这位店员是个聪明人,并且与进入游戏的老板有过接触。经过一番对漏洞的调查和研究,店员得出结论:自己是被虚拟出来的,他周围的一切都是虚幻的。哪一天,真实世界中的计算机电源插头一拔,他就会和自己的世界一起消失。虚拟世界的店员在知道真相后非常痛苦,对这一虚拟世界的制造者充满了怨恨。当他发现了进入虚拟世界的男主角后,就和他角争吵起来,甚至打算杀死男主角。 “世界是虚拟的,虚拟世界中的人物也可以发现真相”,这就是老板留给男主角的信息。死里逃生的男主角在返回自己的世界后,开始循着老板留下的提示去调查,终于发现了这个“真实”世界的漏洞。他痛苦的意识到,自己所处的世界也是被虚拟出来的,不过是另一世界玩家的一场游戏。 重新整理了插图弄了三天,终于把书中所有的图片都转存成了TIFF格式的文件,正好顺便统计了一下书中图片的数量。书中共有692幅图片,其中623幅是带标签标注的图片。不带标签的图片或者是尺寸非常小,就直接嵌在文字中间;或者是图片嵌在表格中,而表格是有标签的。 《我和LabVIEW》的写作过程 重新截取书中插图本以为交稿就万事大吉了,结果才没轻松几天,就又要忙了。今天收到编辑的信说书稿中图片分辨率太低,需要重新截取。虽然打开word文档看那些插图还蛮清楚的,但放在排版软件中就非常模糊了。估计是因为常用的排版软件和word文档的兼容性不好,在格式转换时,图片质量损失严重。我现在只好再把所有插图重新存为TIFF-无压缩RGB格式的文件。 《我和LabVIEW - 一位NI工程师的十年编程经验》本书尚未出版,预期八月底面世。这里是本书相关的链接(正在建设中)。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|