注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

银河军团大本营

光荣的军团,永远的丰碑 <坚持原创>

 
 
 

日志

 
 

Delphi2010升级到XE2代码改动纪要  

2012-12-05 09:01:26|  分类: 应用点滴 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  以前测试Delphi各个新版本时,发现每次升级,第三方控件库就需要改动不少,悲催的Delphi!下面将D2010升级XE2时遇到的一些改动记录下来,以备参考。

  1、SendMessage(handle, TB_GETBUTTON, index, pButton)之类访问Windows核心功能的函数,到XE2下需要用以下函数打开Debug权限(你可能会发现不设置Debug权限时可以在XE2的Debug环境下运行,但单独运行程序就会导致Explorer.exe内存出错):

function EnableDebugPrivilege(const Enable: Boolean): Boolean;
const
PrivAttrs: array[Boolean] of DWORD = (0, SE_PRIVILEGE_ENABLED);
var
Token: THandle;
TokenPriv: TTokenPrivileges;
ReturnLength: Cardinal;
begin
Result := False;
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Token) then
begin
LookupPrivilegeValue(nil, 'SeDebugPrivilege', TokenPriv.Privileges[0].Luid);
TokenPriv.PrivilegeCount := 1;
TokenPriv.Privileges[0].Attributes := PrivAttrs[Enable];
AdjustTokenPrivileges(Token, False, TokenPriv, SizeOf(TokenPriv), nil, ReturnLength);
Result := GetLastError = ERROR_SUCCESS;
CloseHandle(Token);
end;
end;

  2、TList.List原先是PPointerList类型,XE2中改为TPointerList了,所以原先用TList.List^[index]直接访问成员的地方现在要改为TList.List[Index]。

  3、从TDataSet派生而来的数据库组件一般都会重载DataEvent之类的函数,其Integer类型的参数现在都需要改成NativeInt,比如 procedure DataEvent(Event: TDataEvent; Info: Integer); override;就需要改为 procedure DataEvent(Event: TDataEvent; Info: NativeInt); override;

  4、与Integer改为NativeInt类似,ReadProcessMemory的最后一个参数应由DWord改为DWord_PTR;SendMessageTimeout的最后一个参数也应由DWord改为DWord_PTR(不改的话可能出现异常,比如对程序自己发WM_NULL消息时得不到响应)。

  以上这些都是在升级第三方控件及之前的一些程序时遇到的,可能还有其他需要改动的地方,因暂时没遇到,就留待以后慢慢发掘了。

  评论这张
 
阅读(1128)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018