Shen Nan 我试图用add/remove program来完全删除Windows 95中的PaintShop Pro,而且计算机告诉我已经成功删除,但PaintShop Pro还在add/remove program group中,当我想再次删除它时,计算机说我从操作失败了。这是为什么?
李海:正常的情况下,Paint Shop Pro的卸载程序可以删除add/remove program列表中的Paint Shop Pro项,但你这种情况很可能是安装程序意外中断了。首先,应该在资源管理器里看看Paint Shop Pro所在的目录,看看到底Paint Shop Pro是否已经被删除了。如果psp.exe和那些.dll文件都被删除了,则说明Paint Shop Pro的确从你的机器上被删除了。当然还可能残存一些用户自己的文件。如果文件都删除了,但只是在add/remove program列表中还有Paint Shop Pro项,你可以用RegEdit删除HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Paint Shop Pro ???项。这里的???部分可能因为Paint Shop Pro的版本不同而不同。如果Paint Shop Pro的确没有被删除,在这个目录底下有两个文件Unwise.exe和Install.log是与卸载直接相关的。Install.log文件记录了所有安装的信息,这个文件可以用记事本打开阅读。而Unwise是执行卸载操作的。按你所述,这两个文件中至少有一个可能损坏或不见了。你也可以手工删除文件。Paint Shop Pro除了在其自身目录下安装了文件以外,还向系统目录中安装了ctl3d32.dll、MFC42.DLL和MSVCRT.DLL,不过这些文件你都不应该删除,因为很多软件都会使用这些DLL。
张明:我要编写在Win 95下实现硬中断的程序,但我发现VC++ 5.0的库函数中似乎没有以往的_dos_getvect()函数和_dos_setvect()函数,也无法使用“interrupt”关键字。我在<dos.h>中也未找到上述两函数的函数原型,这是怎么回事?是我没找到吗?
李海:这两个函数都不再被VC++支持了。标准的编写硬中断程序方法应该是采用Win95 设备驱动开发包DDK。
Z N: 我现在正在制作一个音乐方面的网页,在音频和视频方面使用了Real公司的Real Player。希望能将一些MTV影碟转换为Real的RM格式,我用Real Encoder 5.1压缩文件,但Real Encoder的输入文件类型只有avi和mov,因此我现在需要将影碟上的dat文件先转换为avi和mov文件,请问什么软件可以做这项工作呢?如果您也需要查询才知道,那么您是如何查询的呢?
李海:我本来以为这是个简单的问题,但试用了许多MPEG的播放器和编码器之后才发现,似乎大多数工具都缺乏这样一项功能。大致有两个方法可以完成这项工作:
一是使用超级解霸5.0的录像和录音功能生成图像序列和wav文件。超级解霸5.0的录像功能可以生成图像序列(BMP、PCX或YUV格式),你可以在www.winfiles.com找到一些将BMP序列转换为AVI格式的工具。不过超级解霸5.0的录像时通常不能生成声音文件,而且这种方法要求你的硬盘空间比较大。
二是使用HyperCam进行屏幕截取。HyperCam可以同时截取图像和声音,在播放影碟是不要选择全屏方式或放大显示模式,否则HyperCam的速度会跟不上播放速度。如果你发现在当前播放模式下,HyperCam的速度较慢,可以试着降低屏幕颜色。
张丽&傅常顺 :我想要用VC++ 5.0编一个OCX控件,在PB中使用,主要完成字符串转换工作,把PB传给OCX的字符串转换成对应的16进制字符串,例如"AAAA"转换成"41414141",传到OCX中的字符串长度固定为16个,输出的字符串长度为32个。
我用VC++5.0已将此控件作好,名称为Convert.ocx,用VC提供的Active Control test Container 测试一切正常,不论是字母,还是汉字,都能转换正确,但当我在PowerBulider5.0中建立一个测试程序时,转换字母串正常,转换汉字串时OCX总是提示长度不对,明明是"一二三四五六七八"8个汉字,16个字节长,程序报告说是17个长,而且转入的字符串变成了"????????¥?????"之类,如果我传入"一AAAAAAAAAAAAA",转换后为"3F3F4141414141414141414141414141",但在VC中测试一切正常,请问可否能帮我查一下是什么原因,该怎么做。
我的主机上同时安装有VC和PB,故在PB中可直接插入Convert.ocx使用,但我把Convert.ocx拷到另一台装有PB的主机上时却无法注册使用,在Insert Control标签中找不到Convert.ocx,我用 Register New 想把Convert.ocx注册一下,却得到"C:\WINDOWS\SYSTEM\Convert.ocx failed to load properly",请问为什么会这样?该怎么做?
李海:我在VB和VC中都测试了你的Convert.ocx,在处理中文和英文时都正确。所以我认为问题可能出在PB上。你的转换工作是通过自定义的srcString属性来获得PB的字符串,按照OCX标准,这个属性属于字符串型,即BSTR(Basic字符串)。BSTR类型同普通的字符串的最大的一个区别是这个类型是按Unicode形式存储字符,即无论英文字符还是中、日、韩字符都以两个字节存储。而你所使用的PB可能是单字节版本,它在将PB的字符串转换为BSTR时会将一个汉字拆成两个ANSI字符,而一个汉字和两个ANSI字符的存储方式是不同的。使用VC++的MFC编写OCX时,MFC会利用Windows系统的功能将BSTR转换为CString类,在这个转换中,中文Windows系统无法正确识别采用两个ANSI字符方式存储的汉字,所以出现了你所说的问题。关于你所说的OCX无法正常注册的问题,我估计是因为缺少必须的DLL。使用VC++ 5.0编译的基于MFC的OCX运行时需要MFC42.DLL(这个DLL是OLE DLL,需要注册)、MSVCRT.DLL、OLEPRO32.DLL;如果你的Windows 95的版本比较低的话,还需要OleAut32.dll。没有这些DLL(1兆多字节),基于MFC的OCX就无法注册。综合这两个问题,我认为你采用OCX来实现这个功能比较麻烦,而应该使用VC++编写一个标准的DLL。一是你要实现的功能比较简单,只是同PB传递字符串,而PB可以调用标准的DLL;二是标准DLL可以传递C语言的字符串指针,而不是BSTR,就没有单双字节的区别了;三是不使用CString类,而只使用C语言的字符串函数就可以完成你所要的操作,这样编译后的DLL无需MFC的DLL就可以运行,文件比较小且更容易维护。PB对DLL调用的要求同VB差不多,即都采用标准的Win32调用方式,具体的办法你可以参考我在本刊今年第4期和第2期《问与答》栏目中的回答。
如果您有任何建议,请给我发电子邮件:
。
版权所有 李海,热情软件屋 1997-2006