摘要:C++和.Net程序采用了两种不同的编译方式。通常一个C++编写的程序,都是一次编译成二进制的代码,在相应的操作系统平台上直接执行即可。而.Net程序采用两次编译的方式,用C#,VB.Net等语言写成的程序被编译成IL代码,通过CLR在运行的时候JIT编译成为本地二进制代码。个人觉得,MFC和WinForm很多设计上的不同从根本上说,都是因为编译模式带来的不同。因此,在仔细探讨MFC和WinFor...
阅读全文
摘要:想写一些关于MFC和WinForm比较的内容。作为Windows操作系统下,两代GUI开发的平台,两者在性能,易用性,执行方式上都有很大的不同。也许现在写这些东西已经有些过时,因为连再下一代的WPF都已经来到了。只不过本人学习曲线怪异,最近才开始仔细研习MFC,因此以此为笔记,促进自己的学习。写的东西主要是关于MFC和WinForm的一些关键机制的分析,当然期间也会涉及很多C++和CLR(或C#)...
阅读全文
摘要:其实,这个消息已经很过期了。早在去年九月份的时候,微软就发布了关于VB9.0的信息。只是,没有关注VB有一段时日了。因为自从VB走上了.Net平台,原来那简单高效(开发效率)的VB不见了,取而代之的是一幅俨然C#双胞胎的面孔。也许这种转变是迫不得已,也许这种变化正是利大于弊(对于我来说,就是这样,如果不是熟悉的VB,也不会开始尝试使用.Net)。因为毕竟,别人有的咱VB也有了。但一想到所有曾经的优...
阅读全文
摘要:懒了好几天,尽玩去了。恩,赶在年前,把想写的再写一点^_^。.Net目的之一是建立一个面向对象的编程平台。CLR当然需要支持面向对象的各个特征,确切一些,CLR基本可以视为一个完全面向对象的平台(回忆一下之前说的CTS)。CLR的面向对象有一些自己的特点和实现手段,下面会分点写一点,很零星不系统,算是一个笔记吧。封装:CLR对封装的支持没有什么特殊的。仍然是public,private,prote...
阅读全文
摘要:在前面说了GC的工作原理。需要注意的是,GC只能回收托管堆中的资源。其他一些非托管资源,比如文件资源,缓冲区,互斥体之类,无法通过GC自动回收。必须通过开发人员自己编程实现对其的回收(有时候会觉得CLR的资源管理也会比较麻烦,因为它有一部分自动的,有用一部分手动的,但和C++比比,我们应该很知足了^_^)。很自然的一种编码方式是将回收资源的函数写入终结函数Finalize中,GC启动回收托管资源的...
阅读全文
摘要:一直觉得C++的资源管理让人很痛苦。我不得不看很多经验性手册,以保证能很好的进行内存等资源的管理。相比之下,.Net(CLR)引入了垃圾回收机制(GC),来完成托管堆资源的回收,这毫无疑问,大大减轻了开发人员的负担。但是,天下没有绝对免费的午餐,要想清楚地了解GC的运行,很好的掌握资源的管理工作(特别是涉及到非托管资源的时候),对我这种AI没有突破性进展的人来说,并不是一件很容易的事情。恩。废话不...
阅读全文
摘要:众所周知,CLR支持多种语言,包括C#,VB.Net等等二十多种(其实说确切一点,应该是各种语言都可以提供编译器,从而运行在CLR上)。为了支持多种语言,CLR必须建立一种模式,使得各种语言都能很容易的运行在其上。而如今各种面向对象的语言,虽然在语法上各有不同,但其核心语义都是类似的。因此CLR利用了这一点,它的所有内容都是围绕着类型展开的。CLR的通用类型系统CTS,就是用来描述类型定义和行为的...
阅读全文
摘要:用.Net就不得不考虑效率问题(这点和Java一样),到底有没有这种性能问题?性能问题有多大?而微软一直声称托管程序是安全的,这种安全性到底是指的什么东西?达到这种安全到底付出了什么东西?我一直对这些问题很迷惑,最近看了一些书后有一些理解,仅仅是理解,欢迎大家来讨论。要比效率,通常都是与C++相比。毫无疑问,除了极少的情况下,托管的程序与传统C++程序相比,效率有所降低,这种降低我个人觉得来源于以...
阅读全文
摘要:托管程序的部署是以程序集(Assembly)为基本单元的。前面说过,一个程序集包含若干个托管模块(exe或dll)。但通常,一个程序集只包含一个dll或exe(在vs中也仅支持这种)。为了生成含多个托管模块的程序集可以用编译器csc.exe或vbc.exe,或者是使用链接器al.exe。这种方式通常会用于分离常用库和非常用库(后面会提到)。程序集是一个逻辑概念,它在某一个托管模块中放置描述程序集信...
阅读全文
摘要:一个托管的程序,从书写代码到编译到最后运行,到底是怎么一个过程,一直有些混沌,好好看了下书,梳理了一下。托管的程序是二次编译的,因此一个托管程序从第一次编译到最后的运行可以根据这两次编译的目的性不同分成两个阶段。第一个阶段是从不同的语言编写的代码通过各自不同的编译器编译生成dll和exe文件。第一次编译生成的dll文件和exe文件统称为托管模块。它们由PE表头,CLR表头,IL,元数据几部分组成。...
阅读全文
摘要:.Net是一个广义的名词。它是一个平台或说是战略。在.Net诞生之初,微软在其一系列产品中都冠以.Net的标签。这也给很多人带来疑惑和不解,到底.Net中具体包含什么?这个问题不仅是我有,我想,甚至微软本身以及一些专家也会有。从.Net大局观这本书的第一版和第二版的不同中,我们可以看到关于这个内容的发展。在第一版中,作者将很多内容都纳入到了.Net平台的名下,而在第二版中,这个问题被明确,只有两个...
阅读全文
摘要:利用假期时间打算重新学习一下.Net。主要是为了解决一段时间以来遇到的问题和梳理一下一些搞不清楚的概念和原理。主要是通过在实践中的一些理解,和.Net大局观和.Net框架程序设计两本书的阅读。恩,有的东西写一写会更明白,如果有不对的地方也希望大家帮忙指正。
阅读全文
摘要:很多时候,会有很多信息存放在Word文档中。而我们需要把这些信息提取出来,另做它用。而Word的格式是ms的机密,不知道有没有NB人可以对其做字符流的分析,反正我是没这能力也没这打算。所以就只能用ms提供的组件来进行编程。但ms没有提供托管的类库,而是提供了对com组件的PIA转换。具体添加,使用和相关知识,可以参见kaneboy's blog中的http://blog.joycode.com/k...
阅读全文
摘要:一点很小的心得。众所周知,具有迭代接口的集合类可以用foreach来遍历。但要求迭代过程不能被重置,也就是不能添加,删除或修改。有时候我们必须要这样做,就需要另辟蹊径来实现遍历。比如ListView控件中的SelectItems是一个基于Items的子集合。如果需要删除所选项时,无法利用foreach来实现。这时候可以用类似于下面的代码了实现:while (aList.SelectedItems....
阅读全文
摘要:写一个小软件的时候碰到了一个问题。有一串很耗时的函数需要处理。基本流程如下:private void Sample(){ aMethodNeedLongTime();//一个很耗时的计算函数 aMethodNeddLongTimeRefWithUI();//一个很耗时的与UI控件处理相关的函数}很显然,执行这个函数界面会无法响应。为了解决这个问题,我几乎是不假思索的写下了下面这样的代码...
阅读全文
摘要:一直对本地化挺有兴趣。原来也做过类似的工作。但一直都觉得做得不好。所以很想看看DNN是怎么做得。在DNN的文档中/Documents/DotNetNuke Localization看了一下。觉得这篇文章写得很好。然后又特意去查了下MSDN。结果查到了这篇文章http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vb...
阅读全文