社区
Delphi
帖子详情
如果碰到D5做的程序D6编译不通过怎么办
pchddcat
2003-01-14 01:12:45
如果碰到D5做的程序D6编译不通过怎么办
...全文
47
3
打赏
收藏
如果碰到D5做的程序D6编译不通过怎么办
如果碰到D5做的程序D6编译不通过怎么办
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qsfsea
2003-03-12
打赏
举报
回复
gz
silverwonder
2003-01-14
打赏
举报
回复
在FormClosed事件中,我们可以通过调用TDesignerSelectionList.Create 或者 TComponentList.Create来创建选择列表。而在DesignerClosed事件中做同样操作得使用IDesignerSelections接口。你可以调用CreateSelectionList函数来获得一个接口。
SelectionClosed方法的参数也和Delphi 5版本中的有所不同。
九. VCL 包的变化
一些VCL相关的包已经被重新分配到其他的包里。假如你在工程中引用了vcl50.dcp,那么你需要将这个引用改为引用vcl.dcp和rtl.dcp。
十. OpenGL 接口单元改到rtl.dcp中
Borland OpenGL接口单元(opengl.dcu)在Delphi 5的库单元目录中是一个独立的单元。在Delphi 6中它被合并到rtl.dcp中。这可能导致某些Delphi 5的工程升级到Delphi 6时引发一些问题。
举个例子来说。在Delphi 5的工程中,可能你会将与OpenGL单元同名的单元放置在工程目录中,以覆盖系统提供的OpenGL单元。而在Delphi 6中,假如有任何组件引用了rtl.dcp,则将导致命名冲突,非得更改名称才行。
十一. HTTPApp.pas 单元中的一些类型声明移动到 HTTPProd.pas单元中
HTTPApp 单元中的一部分类型被移动到了HTTPProd 单元中。他们是THTMLBgColor,THTMLAlign 和THTMLVAlign。如果你的工程中使用了这些类,那么需要将引用的单元由HTTPProd改为 HTTPApp 。
十二. Search 单元被删除,SearchBuf例程做了修改并被移动
单元Search在Delphi 6中不再保留。SearchBuf例程,用来在一个文本的缓冲区中定位子串,已经被移动到StrUtils单元中,并且调用的参数也发生了变化。最后一个参数改为一个TstringSearchOptions的对象。如果你的工程因为不能找到Search单元而无法编译,请将引用Search改为引用StrUtils单元。同时你应当检查对SearchBuf的调用是否符合新的语法。
silverwonder
2003-01-14
打赏
举报
回复
有个最笨的方法:重新敲一遍准行。
另外,转篇文章
打开Delphi 5 (或更早版本)的工程,新版本会自动对其进行升级。以下将要介绍的是新版本中可能会对现有的Delphi工程带来潜在影响的一些改动。
IDE(集成开发环境)特性
包名称的自动更新
兼容性问题
想要了解更多其他信息,请参考”Delphi6新特性”这一部分的内容。
兼容性问题
以下列出的是可能影响你的Delphi应用程序的几个大的方面:
一. 由于VCL体系结构的变化而引起的Provider和Client Dataset 的一些事件的变动
TCustomClientDataSet的引入,使得Delphi 5或早期版本中的事件处理机制有些改动。
DBCLIENT.PAS单元中有5种类型的6个事件发生了变化,他们分别是:
事件类型 变化
TResolverErrorEvent 影响到provider的 OnUpDateError 事件。
TBeforeUpdateRecordEvent 影响到provider的 BeforeUpdateRecord事件。
TAfterUpdateRecordEvent 影响到provider的 AfterUpdateRecord事件。
TProviderDataEvent 影响到provider的 OnGetData and OnUpdateData事件。
TReconcileErrorEvent 影响到client dataset的 OnReconcileError 事件。
必须将以上提到的这些事件对应的处理函数(过程)中的TClientDataSet替换为TCustomClientDataSet。
二. 使用默认数据库登录的代码的变动
原先,将一个连接组件(比如 Tdatabase,TADOConnection,或TDCOMConnection)的LoginPrompt属性设置为True,则会有默认的登录对话框弹出。这一特性已经不再保留除非你在单元引用中增加一个引用DBLogDlg的语句。如果想要应用程序仍然能够弹出默认的登录对话框,务必加上 Use DBLogDlg这么一句,否则便不会有任何提示输入用户名和密码的对话框出现。
三. 潜在的二进制Form文件的不兼容
过去,新版本Delphi创建的二进制Form文件(或称DFM文件)可以被老版本的Delphi读取。但是现在不行了。某些二进制Form文件可能不能被老版本正确的读取,其原因是Delphi 6内部的字符串的流化和原先不同。过去,流化操作假设一个本地特殊的字符集。而现在新的流化操作假设字符集为UTF-8。由此带来的问题就是,如果Delphi 6的二进制Form文件中包含有码值大于127的字符出现(比如版权符®),则该文件就不能被Delphi 的老版本正确读取。
如果你想在老版本的Delphi 中打开Delphi 6 的Form文件,那么请先将该Form文件存为文本格式而非二进制格式。
四. 有关可赋值的常量
编译宏$WRITEABLECONST现在的缺省值为关(OFF),这是为了防止在Delphi的工程中运用可赋值的常量。可赋值的常量,也就是定义一个常量,但是却允许在运行期间改变其值。例子如下:
const
foo: Integer = 12;
begin
foo := 14;
end.
在以往的Delphi版本中,有这么一个特性:常量不是真正的常量。使用编译宏$WRITEABLECONST OFF,则以上的代码中Foo的赋值将引发一个编译错误。若要避免这个错误,可将Foo的声明改为 var。
将常量用作一个可以初始化的局部变量,这样的代码如下:
procedure MyProc;
const
somedata: Integer = 12;
begin
Inc(somedata, 3);
end;
现在你要做的是将局部常量的声明移到过程的外部,使其成为一个全局的变量。然后代码变为:
var
somedata: Integer = 12;
procedure MyProc;
begin
Inc(somedata, 3);
end;
对于过度依赖于常量的代码(比如ActiveX 控件的包装器),可以通过在源文件中插入一个{$WRITEABLECONST ON}的编译命令来修正。这一特性,在RTL, VCL, CLX,和 DB 等核心的源代码中被禁止使用,但是在周边的单元比如ActiveX 控件的包装器中倒可以接受。
总而言之,你应该意识到“可赋值的常量”这个说法的自相矛盾性。Delphi的以往版本中的这一特性,只是为了与老的16位的编译器的兼容而保留,但现在对于Delphi的开发者来说这已经毫无意义了。另外,要养成好的编程习惯,应当尽量避免使用“可赋值的常量”。
五. Cardinal类型的负数值
过去,Delphi处理Cardinal类型的负数值时使用32位的机制,这样使得结果为一些零头的值(Cardinal类型允许的最大的值与当前值的差加一)。例子如下:
var
c: Cardinal;
i: Int64;
begin
c := 4294967294;
i := -c;
WriteLn(i);
end;
在以往版本的Delphi中,I的值应当是2。但是现在就不是这样的了。在Delphi 6中,Cardinal类型是先转化为64位的有符号类型,然后做取负数值的运算,所以最终结果I的值为-4294967294。
可能有些代码依赖于原先错误的Cardinal负数值的实现方法,所以希望读者对于Delphi 的这一新特性引起足够的重视。花足够多的时间来检验你的代码中是否存在对Cardianl类型的值取负数的情况是很值得的,同时确信一点,Delphi的这个新的特性对你的程序的正确性不构成影响。
六. 单元DsgnIntf改名及相关变化
程序中对于DsgnIntf的引用,需要改为对一个新的单元的引用:DesignIntf。可能还得加上DesignEditors、Editors 和RTLConsts 几个单元到你的引用列表中。除此之外你还得将designide加入到你的包的Requires的列表中。另外,对dsnide50的引用可能得手动改为DesignIde,如果Delphi没有自动更改的话。
任何引用了IDesigner的运行期包,需要改为IDesignerHook以防止运行期时对于designide单元的引用要求。在运行期代码中,IDesignerHook 功能足够使用,无需担心。设计期时可以使用IDesigner,如以下代码一样:
var
RealDesigner: IDesigner;
...
SomeDesignerHook.QueryInterface(IDesigner,RealDesigner);
...
来获得IDesignerHook 提供的IDesigner的接口。IDesinerHook的使用只需要引用Classes和Forms两个单元。但是IDesigner还得加上DesignIntf单元,由于该单元被包含在许多其它包中,而其中的一些包可能是不能二次分发的。
七. 有关组件编辑器的变化
Delphi 6中,TComponentEditor类有了不同的祖先。在Delphi 5中,它从TInterfacedObject
继承而来;现在它从一个新的类,TBaseComponentEditor继承而来。同时,TComponentEditorClass也变为TbaseComponentEditor的类类型,而不是TComponentEditor的类类型。这些体系结构上的变化可能需要你修改老的Delphi程序。
八. TDesignWindow 的变化
许多变化都和类TDesignWindow有关。它的声明被移到单元DesignWindows中,并且FromClosed方法被替换为DesignerClosed。以往,在FromClosed事件中可以通过访问参数Aform来访问Form。而在新的事件DesignerClosed中,我们需要通过Designer的Root属性来访问Form。
制作扑克游戏的小工具
程序
画扑克牌的DLL。只有1个函数:在指定的Tbitmap上画第n张牌drawcard(bmp:Tbitmap;... 以前在这里放的是经
D5
编译
过的Dll,不能被
D6
编译
的应用
程序
调用。经过试验,用
D6
编译
过的Dll,也不能被
D5
编译
的应用
程序
调用。
扑克游戏
画扑克牌的DLL。... 以前在这里放的是经
D5
编译
过的Dll,不能被
D6
编译
的应用
程序
调用。经过试验,用
D6
编译
过的Dll,也不能被
D5
编译
的应用
程序
调用。真是太奇怪了。我刚装
D6
,不懂它为什么有如此妙处。
**DockPresident**,世界上功能最强大的停靠(Docking)控件
这是一个免费
程序
(目前还是测试版),作者不但提供控件, 而且还无偿提供控件的所有源代码,您可以在个人或者商业
程序
中免费使用... 但是如果用户要自己
做
一个全新的
程序
,请按照前面的方法配置您的Delphi.
Delphi网络文件搜索共享模块源代码.rar
Delphi网络文件搜索共享模块源代码,该
程序
用
D5
编译
,若用
D6
(D7还没试过),虽然
编译
能通过,但运行会有问题。生成的可执行文件在Release目录中。若该目录不存在,在本级目录中建一个即可。
dspack2.3.4
如果在Delphi5或6中安装,则选择对应的
D5
或
D6
的文件。 (安装过程中遇到了一个
编译
错误,说找不到Jedi.inc。这个文件在src\Directx9目录下,为什么不能搜索。原来文档里写的路径是 (DSPackDir)\src\Directx9,而...
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章