摘要:
转向.NET后,手头上往往仍有旧的模块要重用。也许这些模块是Delphi写的,也许是C/C++写的,或者是其它编程语言……为了能把它们移植到.NET下,或者是在.NET中调用,To be or not to be, that is a question。
在这里,我笔记了几个在工作中遇到的几个场景。不过,这里不包括完全使用C#来重写原来用C++编写的程序这种变态的需求。当你被要求做这种事的时候,请三思而后行……这简直是种非人的折磨。
阅读全文
摘要:
为了创建一个主窗口不显示的应用程序,我做了若干个探索。结果绕了几个弯,回到最简朴的没有窗体的世界中。
由此发现,我已经对窗体设计器产生了严重的依赖性,而且自已已经懒得不得了了--哪怕只有几行的代码,也要IDE自动生成。
本次修订,将探索过程,以及最后的解决,全部呈现出来,希望和我一样懒的人引以为戒。 阅读全文
摘要:
也算是后知后觉,没想到刚过完年,Borland就要把IDE生产线给卖了,而且不但不用心卖,还有点欲贱之而后快的感觉,实在是悲哀…… 似乎Borland总是喜欢创造传奇,然后开始糟蹋传奇。Borland Turbo C/C++如此,现在Delphi也如此。曾经顶级的编译器厂家,如今转行了…… 记得最早想要找一款能够方便的开发windows下的应用程序的软件,试过vb,powerbuilder... 阅读全文
摘要:
C语言的指针相当的灵活方便,但也相当容易出错。许多C语言初学者,甚至C语言老鸟都很容易栽倒在C语言的指针下。但不可否认的是,指针在C语言中的位置极其重要,也许可以偏激一点的来说:没有指针的C程序不是真正的C程序。
然而C++的指针却常常给我一种束手束脚的感觉。C++比C语言有更严格的静态类型,强调类型安全,强调编译时检查。因此,对于C语言中最容易错用的指针,更是不能放过:C++的指针被分成数据指针,数据成员指针,函数指针,成员函数指针,而且不能随便相互转换。而且这些指针的声明格式都不一样.
尽管C++中仍然有万能指针void*,但它却属于被批斗的对象,而且再也不能“万能”了。它不能转换成成员指针。
这样一来,C++的指针就变得很尴尬:我们需要一种指针能够指向同一类型的数据,不管这个数据是普通数据,还是成员数据;我们更需要一种指针能够指向同一类型的函数,不管这个函数是静态函数,还是成员函数。但是没有,至少从现在的C++标准中,还没有看到。
阅读全文
摘要:
题目也许有点夸张。但是如果你在VS2005崩溃之后发现,你的代码凭空消失时,你就不会觉得有多么夸张了。 这是我遇到的一个典型场景,在一个DataAdaptor中定义一系列的计算列(Column):TotalPayment、TotalPaid,其中列TotalChange的表达式为:TotalPayment-TotalPaid。如下图: 现在,我觉得TotalPaid命名不恰当,因此,将To... 阅读全文
摘要:
在C/C++中,数据指针是最直接,也最常用的,因此,理解起来也比较容易。而函数指针,作为运行时动态调用(比如回调函数 CallBack Function)是一种常见的,而且是很好用的手段。 阅读全文
摘要:
指针,在C/C++语言中一直是很受宠的;几乎找不到一个不使用指针的C/C++应用。用于存储数据和程序的地址,这是指针的基本功能。用于指向整型数,用整数指针(int*);指向浮点数用浮点数指针(float*);指向结构,用对应的结构指针(struct xxx *);指向任意地址,用无类型指针(void*)。
本文先探讨C++中用于存储各种类型数据的指针。
阅读全文
摘要:
LuaPlus是Lua的C++增强,也就是说,LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C++进行合作,是比较好的一个选择。
阅读全文
摘要:
.NET的类可以用 sealed 关键字来说明一个类是最终类,也就是说不能作为基类,不能被继承。Java也有个相同的关键字final完成同样的功能。这个功能有时候很有用。但是C++没有这个关键字。那如何在C++中实现类似的功能呢? 阅读全文
摘要:
程序文档,曾经是程序员的一个头痛问题。写一个程序文档,比较花时间,但不是很难;麻烦的是当程序修改后,程序文档也要跟着同步更新,否则文档和程序就要脱节,文档也就变成没用的东西了。
好在有许多好用的文档生成器来解决这个问题。目前比较流行的C++文档生成器是doxygen。
本文就简单的介绍一下doxygen的文档注释方法,以供初学者参考 阅读全文
摘要:
VB.NET的函数允许有返回值,反过来说就是VB.NET的函数可以不返回值。我认为这是一个很大的缺陷。假设有下面一个函数Calc,它的功能是计算n的阶乘: Function Calc()Function Calc(n As Integer) As Integer Dim i As Integer Dim r As Integer = 1 For i = 2 To n r = r * i... 阅读全文
摘要:
.NET 本身提供了强大的脚本引擎,可以直接使用.NET CLR的任何编程语言作为脚本语言,如VB.NET、C#、JScript, J#等等。使用脚本引擎,我们可以动态生成任意表达式、或动态导入任意脚本文件,并在任意时候执行。
经实践发现,我们可以使用至少两种不同的方式在.NET中使用脚本引擎:VsaEngine和CodeDom。
本文介绍如何以CodeDom方式来动态生成可执行代码。
阅读全文
摘要:
我们经常需要控制窗口控件的状态。比如,在某些情况下,需要禁止一部份控件,或让一部份控件呈只读状态等等。本文介绍一种方法,可以在RAD可视化设计界面中直接指定控件的状态,并只用很简单的代码来切换状态。
阅读全文
摘要:
.NET Framework1.0和1.1 都没有实现OleContainer组件。查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer。这绝对是一个超重的实现,不过,最目前情况下,却是一个最省事的方法。本文就简单的说明一下,如何使用IEBrowser控件来嵌入Excel表格,同时也针对存在的问题作一个讨论和变通的解决方法。 阅读全文
摘要:
关于 int 与 byte[] 的相互转换,Mattias Sjogren 介绍了3种方法。其实应该还有不少方法。在这里,我归纳了包括Mattias Sjogren在内的4种方法。 阅读全文
摘要:
.NET的应用程序配置文件,使用的是XML格式。相对INI文件来说,它的功能要强上不少,而且具有很强的可扩展性。它的缺点是不能直接进行写操作,也就是说,不能直接在程序中修改配置文件的数据(当然不是指不能,不过不是本文讨论的范围)。本文主要目的是探讨如何扩展配置文件,并在其加入各种自定义配置信息。
阅读全文
摘要:
.NET的应用程序配置文件,使用的是XML格式。相对INI文件来说,它的功能要强上不少,而且具有很强的可扩展性。它的缺点是不能直接进行写操作,也就是说,不能直接在程序中修改配置文件的数据(当然不是指不能,不过不是本文讨论的范围)。本文主要目的是探讨如何扩展配置文件,并在其加入各种自定义配置信息。 阅读全文
摘要:
.NET 提供的反射(Reflection)机制可以很方便的加载插件。本文提供一种方法,可以灵活的正确的载入所需的插件。 阅读全文