2007年5月29日星期二

DCOM迷航(二)

如何使DCOM的服务器可以回调客户端的函数。在尝试了若干人指出的若干方法之后,发现只有一种可以。就是在服务器和客户端创建两个用户名和密码相同的用户,服务器的DCOM指定用这个用户运行,客户端起码要是Power Users,就可以顺利回调。

2007年5月23日星期三

Turbo C++ Explorer 不支持ATL

在编译一个OPC的例子的时候,发现Turbo C++ Explorer不支持ATL。根据Borland的说法,其实在BDS 2006的时候已经移除了ATL的支持。不知道为什么?BCB 4.0 到 6.0是支持的。

如果在编译的时候报告找不到vcla1.h,说明你的程序用了ATL。

2007年5月21日星期一

DCOM迷航(一)

为了玩OPC,必须在机器上让DCOM跑起来。使用dcomcnfg这个工具配置DCOM时,发现一选择“COM+应用程序”这个组就会出现一个错误,查看事件查看器,发现了这样一个错误信息:

运行时环境检测到其内部状态存在不一致。这说明进程中存在潜在的不稳定性,可能是由于 COM+ 应用程序中运行自定义组件、COM+
应用程序使用的组件或其他因素引起的。Error in
d:\qxp_slp\com\com1x\src\comsvcs\txprop\dtcinfo.cpp(158), hr = 8000ffff:
TransactionManager->GetWhereaboutsSize
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp
的帮助和支持中心。

一头雾水。不过微软的出错信息就是天书,否则要个那么大型的MSDN做什么?还好,有Google,搜了一下“qxp_slp”,发现了微软自己的一篇文章。大概是说,安装了一个微软的补丁MS05-051后,%windir%\registration目录的权限会出现问题,会导致COM+出现很多问题,其中一个会提示上面这个信息。按照微软的指示,更改了权限后,发现结果还是一样。“COM+应用程序”照样出错。后来醒目一点,把事件查看器里面的打叉的记录一条一条调出来看,发现了一个问题:

正在运行 MS DTC 服务的帐户无效。 如果使用 Microsoft Management Console (MMC)
中的“服务”管理单元更改了服务帐户信息,就会发生这种情况。 MS DTC 服务将继续启动。请确认使用“组件服务管理器”更新了 MS DTC 服务帐户信息。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp
的帮助和支持中心。


发现这条出错信息之后,才会不断地出现第一条出错信息,看了这是罪魁祸首。同样的,不知道它在说什么。还好,又google了一下,又在微软那里查到了解决办法。在强行为MS
DTC服务创建了NT AUTHORITY\NetworkService登录用户后,一切正常。

2007年5月18日星期五

Borland回来了

其实是CodeGear带着原Borland的IDE回来了。CodeGear是Borland没卖成IDE之后,把IDE分拆出来成立的新公司。说Borland回来是因为Borland这个名字太响了,是程序员们的Heavenly Jerusalem。在猛禽那里看到《在TCX中使用SQLite3》,才知道CodeGear重新启用了Borland的Turbo商标,推出了Turbo系列的开发工具,其中有我最喜欢的Turbo C++ Builder 2006,分Professional和Explorer两个版本,Explorer是免费的,除了不能使用第三方VCL控件外,没有什么限制,基本和C++ Builder 2006一样。我还特地看了一下它的License,发现可以用于商业软件开发。我毫不犹豫地下了一个试用,装了一大堆.Net的支持,终于看到了熟悉而陌生的界面了。把一个7年前用C++ Builder 4.0做的多线程+数据库+串口通讯的程序放进去编译,发现大概需要改动一两处代码,主要是一些定义的小改动,程序基本就可以编译通过并跑起来,简直太棒了,就象一个多年不见的感情很好的情人又回到身边一样,往事又历历在目。

当年第一个C的开发环境就是Turbo C 2.0,后来用了Turbo Pascal 5.5和6.0,再后来是Turbo C++ 3.0。Delphi 1.0 16位版让我在Windows 3.1上见识了Visual的开发。当然,之后为了工作需要,开始使用Power Builder 5.0和6.0,再后来又因为需要开发多线程应用,使用了C++ Builder 4.0,感受到了VCL的魅力,BCB虽然用了Pascal写成的VCL库,影响了它的编译速度,但也继承了Delphi的稳定性,对于Windows的线程也做了很好的封装,而且可以直接调用Windows的API,所以当时写成的程序是可以在Windows NT上连续不间断运行几个月不当机的。以至于后来还是工作需要,使用VC++ 6.0的时候,我大骂了一声:“这也敢称自己Visual”。后来由于Borland的犹豫不决,好多人离它而去了。而且开源运动蓬勃发展,自己的工作也转向了Unix领域,就开始用vi和gcc了。对于Windows下的本地开发,一直也有关注,但始终找不到一个好的方案,受开源影响,始终很想找一个免费的开发方案。Cygwin和MinGW的效率太差,而且没有好的窗体库和它们配合,用MinGW编译wxWidgets简直是恶梦。微软的免费VC++ Express 2005实在太差。所以,CodeGear的免费工具来得实在太及时了。而且从CodeGear最近的动作来看,Borland IDE的复兴开始了,一个接着一个的惊喜,从Delphi For PHP,到宣布要推出Delphi For Ruby on Rails。我决定重投Borland的怀抱,毕竟一个免费的强健的可视化开发工具太吸引人了。

相关链接:

2007年5月16日星期三

谁说自由软件运动已死

今天好多网站上都在说“微软主管声称自由软件运动已死”(英文):

前IBM员工现微软首席平台战略主管,微软Linux实验室负责人Bill Hilf狂言宣称要剥开围绕在开源软件周围的神话。“自由软件运动正走向死亡,Linux在2007年不再存在,你看就连Linus都有一个工作。”Linux
kernel是由全职雇员维护的,拥有优先认股权。大部分人在IBM,Oracle,RedHat等商业公司工作。这意味着什么?这说明Linux在
2007年不再存在(我觉得他疯了)。世界上没有什么免费软件运动。如果说Linux代表了爱,和平和和谐,这是错误的,再说一遍没有自由软件运动,这都是商业行为。是由大的商业公司如IBM和小的商业公司如Ubuntu组成的。Hilf表示微软对开源感兴趣也是出于商业原因,不是什么伟大的利他性、爱或是营销手段。

微软又在做它的FUD(Fear, Uncerntainty and Doubt)战略了。这次采用的是偷梁换柱的手法。首先,Linux不是开源的全部,作为开源操作系统,FreeBSD早就解决了源代码和Unix专利的授权问题。Linux其实应该叫GNU-Linux,除了核心之外,其余的部分,从编译器到系统库(GLIBC)大量采用GNU的东西。GNU是GNU is Not Unix的缩写,是Richard Stallman在多年前,看不惯大公司垄断操作系统而建立的项目,所有的东西几乎都是从头写起,全部开源,而且都是基于GPL,目的就是为了这些源代码不至于给某些公司封闭起来,而是大家可以共享所有人的成果,真正的人人为我,我为人人。所以GNU才是开源运动的发源地。开源运动的结果是推动了信息产业的快速向前发展。问问现在多少人在用GCC就可以了。所以,即使Linux商业化了,我们仍然有其他选择,可以用FreeBSD,可以用各种其他的开源操作系统,GNU甚至有自己的内核叫Hurd。更何况在众多Linux的商业发行版之外,还有一个完全遵循GNU方式的发行版Debian

其次,Linus Torvalds也不是开源运动的领袖。真正的领袖是Richard Stallman。他,总是“风尘仆仆,行囊相随,四处布道。他带着一台笔记本电脑,但这不是他个人的,而是属于自由软件基金(FSF)。其实,Richard Stallman 从来就没有拥有过一台自己的计算机。也从来只用自由软件(当然他从来没有用过Windows)。而且,他也没有自己的汽车、电视和房产。这位46岁的单身汉节俭地居住在一间租来的房子里。已有15年了,没有领取过一个月的正式工资。因为他的工作就是使软件获得自由。”

所以,微软应该去看看Sourceforge和Freshmeat上有多少开源项目,有多少人在使用开源项目,再来说自由软件有没有死。

从我自己的例子再来说明,自由软件运动为什么不会死。微软曾经有一段时间免费提供VC++ Express 2005下载,我庆幸了很久,微软也终于肯把编译器免费提供了。实际上发现我错了,微软花了一年时间也没解决“updating intellisense... ”的问题,最后问题解决了,却发现最终解决问题的补丁没法下载,一定要订阅MSDN才可以拿到。这就是Richard Stallman说的不“自由”,要么我选择不用微软的产品,要么就要忍受这种非常不公平的待遇。相反,我在一个项目里面用了开源的产品,结果发现它在处理中文时候有问题,我马上浏览源代码,很快就发现了问题所在,我一方面将修改发给了项目的开发团队,他们承诺会在下一个版本纠正,另外一方面,我自己修改了源代码,更正错误,我的软件马上就可以正常工作了,所以这样才是使用软件的“自由”。

我相信微软还是可以继续强大很久,我也承认微软产品的易用程度、功能、普及程度远远高于自由软件。但是自由软件运动不会死,而且会继续扮演着非常重要的角色,而且将会有更多的人参与到里面来。