标签: delphi-2010

是否记录了隐式接口变量的编译器处理?

不久前我问了一个关于隐式接口变量的类似问题.

这个问题的来源是我的代码中的一个错误,因为我没有意识到编译器创建的隐式接口变量的存在.拥有它的过程完成后,该变量已完成.这反过来导致了由于变量的生命周期比我预期的更长的错误.

现在,我有一个简单的项目来说明编译器的一些有趣的行为:

program ImplicitInterfaceLocals;

{$APPTYPE CONSOLE}

uses
  Classes;

function Create: IInterface;
begin
  Result := TInterfacedObject.Create;
end;

procedure StoreToLocal;
var
  I: IInterface;
begin
  I := Create;
end;

procedure StoreViaPointerToLocal;
var
  I: IInterface;
  P: ^IInterface;
begin
  P := @I;
  P^ := Create;
end;

begin
  StoreToLocal;
  StoreViaPointerToLocal;
end.
Run Code Online (Sandbox Code Playgroud)

StoreToLocal编译就像你想象的那样.局部变量I(函数的结果)作为隐式var参数传递给Create.通过StoreToLocal一次通话即可获得整齐的结果IntfClear.没有惊喜.

但是,StoreViaPointerToLocal对待方式不同.编译器创建一个传递给它的隐式局部变量Create.当Create返回时,对分配P^进行.这使例程中有两个局部变量保存对接口的引用.StoreViaPointerToLocal两次调用结果的整理结果IntfClear.

编译后的代码StoreViaPointerToLocal是这样的:

ImplicitInterfaceLocals.dpr.24: begin
00435C50 55 …
Run Code Online (Sandbox Code Playgroud)

delphi interface delphi-2010

86
推荐指数
1
解决办法
2593
查看次数

我应该如何为最终的64位编译器准备我的32位Delphi程序?

可能重复:
迁移到Delphi 2010和Unicode时如何准备64位

由于我相信64位 Delphi编译器很快就会出现,我很好奇是否有人知道现在32位的程序将在使用64位编译器时编译和工作而不做任何更改.

如果有一般规则,我们应该在旧程序中系统地进行哪些更改以编译为64位

64位编译器突然出现时,做好准备是很好的 ...

任何建议将不胜感激.

delphi unicode 32bit-64bit delphi-2010

59
推荐指数
5
解决办法
9809
查看次数

Delphi 2006-2010错误:"无法创建文件C:\ Users\Admin\AppData\Local\Temp\EditorLineEnds.ttr"

我在安装Delphi 2007后遇到错误(编辑:这个问题发生在2006年到2010年的所有Delphi版本中),我无法弄清楚,以前从未见过.重新启动后,我可以毫无问题地启动程序,但如果我要关闭程序并重新启动它会给我以下错误:

"无法创建文件C:\ Users\Admin\AppData\Local\Temp\EditorLineEnds.ttr".该进程无法访问该文件,因为它正由另一个进程使用."

"System"具有此文件的句柄,除非我重新启动,否则无法清除该句柄.我也可以通过在启动程序之前重命名文件来解决问题.

我试过没有运气重新安装程序.

安装版本:CodeGear™Delphi®2007forWin32®R2版本11.0.2902.10471.操作系统:Windows 7 Pro 64bit

更新08/14 13:35 EDT 尝试了以下解决方案,但仍然遇到相同的文件锁定问题:

  1. 将Temp Directory重命名为我知道具有完全安全权限的目录.启动Delphi时,文件将在此目录中创建,但是EditorLineEnds.ttr仍然会被SYSTEM锁定并阻止我重新启动.
  2. 卸载了以下安全更新KB2982791和KB2976897,但这并没有解决问题.我暂时禁止了Windows更新,并尝试卸载8/13的所有安全补丁.
  3. 完全卸载Delphi并重新安装.重新安装所有内容后仍然会出现问题.

我将尝试从头开始重新安装Windows并在Windows更新之前安装Delphi,以查看更新是否真的是原因.我现在的解决方法是在启动Delphi之前重命名EditorLineEnds.ttr.

delphi delphi-2009 delphi-2007 delphi-2006 delphi-2010

54
推荐指数
2
解决办法
8万
查看次数

使用TOpenDialog选择目录

我真的想知道用TOpenDialog选择目录的各种方法,无论是下载新组件还是使用Delphi提供的内容,但最好使用Delphi提供的内容.

在此之前,我一直在使用SelectDirectory命令,但我认为我的程序用户查找指定目录会很困难.

我认为SelectDirectory是"弱"的,因为在搜索你想要的目录时它可能是一个很长的过程.比如说,您想要导航到Application Data目录.在那里航行需要多长时间或多长时间?最后,用户甚至可能无法访问他们想要的目录.

我需要这样的东西,用户可以将目录复制并粘贴到顶部的目录地址栏中.

在此输入图像描述

谢谢你的所有答案.

delphi delphi-2010

48
推荐指数
4
解决办法
8万
查看次数

我为什么要关心Delphi中的RTTI?

我听说过很多关于Delphi 2010新的/改进的RTTI功能,但我必须承认我的无知......我不明白.我知道每个版本的Delphi都支持RTTI ......我知道RTTI(运行时类型信息)允许我在应用程序运行时访问类型信息.

但究竟是什么意思呢?Delphi 2010的RTTI支持与.NET中的反射相同吗?

有人可以解释为什么RTTI有用吗?假装我是你的尖头发老板,帮助我理解为什么RTTI很酷.我如何在实际应用程序中使用它?

delphi reflection rtti delphi-2010

42
推荐指数
3
解决办法
8254
查看次数

使用Delphi安装哪些组件和IDE加载项?

在干净安装Delphi之后,您确定要安装哪些组件和IDE加载项?什么是你的Delphi"装备"?这是我在干净安装后安装的内容:

  1. Delphi 2007/Delphi 2010
  2. JCL/JVCL - JEDI代码库和JEDI可视代码库(600多个组件)
  3. JWA/JWSCL - JEDI API库和安全代码库
  4. GExperts - GExperts是一套免费的工具,旨在通过向IDE添加多个功能来提高Delphi和C++ Builder程序员的工作效率.(现在包括以前的实验代码格式化程序.)
  5. CnWizards - 提供IDE增强功能以​​提高开发效率
  6. Virtual TreeView - Virtual Treeview是一个从头开始构建的树视图控件.经过5年多的发展,它成为当今最灵活,最先进的树木控制之一.
  7. MustangPeak组件(EasyList视图,虚拟ShellTools等) - EasyListview是一个不依赖于Microsoft Listview控件但具有Microsoft最新版本的所有功能的控件.还包括'Explorer.exe'之类的shell组件.
  8. Synapse轻量级网络组件 - 包含简单的低级非可视对象,可轻松编程而不会出现问题.(不需要多线程同步,不需要Windows消息处理,...)非常适合命令行实用程序,可视化项目,NT服务
  9. EurekaLog - EurekaLog是Delphi和C++ Builder开发人员的完整错误解决工具,它使您的应用程序能够直接在最终用户PC上捕获每个异常和内存泄漏,生成调用堆栈的详细日志(带文件,类,方法和行号),可选择通过电子邮件或Web错误跟踪器向您发送每个日志条目的副本.
  10. DelphiSpeedUp - DelphiSpeedUp是Delphi和C++ Builder的IDE插件.它提高了IDE的启动速度,并提高了整个IDE的总体速度.
  11. DDevExtensions - DDevExtensions通过添加一些新的生产力功能扩展了Delphi/C++ Builder IDE.
  12. IDE修订包 - IDE修订包安装是一个DLL-Expert,可在运行时修复以下RAD Studio 2007错误.所有更改都在内存中完成.磁盘上没有文件被修改.
  13. TPerlRegex - Delphi的正则表达式库

其他Delphi开发人员怎么样?

delphi delphi-2009 delphi-2010

36
推荐指数
3
解决办法
9747
查看次数

在Delphi-2010中不推荐使用TThread.resume应该使用什么?

在我的多线程应用程序中

我使用TThread.suspendTThread.resume

自从将我的应用程序移至Delphi 2010后,我收到以下交战消息

[DCC警告] xxx.pas(277):不推荐使用W1000符号'Resume'

如果弃用Resume应该使用什么?

编辑1:

我使用Resume命令启动线程 - 因为它创建时将'CreateSuspended'设置为True并在终止线程之前挂起.

编辑2:

这是delphi 2010手册的链接

delphi delphi-2010

35
推荐指数
5
解决办法
3万
查看次数

将项目从Delphi 7迁移到Delphi XE有多难?

我们公司有一个已经开发了十多年的软件,因此有一些真正过时的东西.它仍然非常实用,但是我看到了Delphi XE的新功能,它让我想切换.问题是源代码本身超过300mb的.pas文件(总共1gb与组件等).

我们正在使用自定义组件,旧的jvcl和最新的devexpress.

如果我决定从Delphi 7迁移到Delphi XE,我有多难以期待事情发生?

谢谢.

delphi delphi-7 delphi-2010 delphi-xe

34
推荐指数
5
解决办法
2万
查看次数

什么是Delphi System单元中的TMonitor有用?

在阅读了文章"Simmering Unicode,让DPL沸腾""Simmering Unicode,让DPL沸腾(第2部分)"的"Oracle Delphi"(Allen Bauer)之后,Oracle就是我理解的全部:)

文章提到了Delphi Parallel Library(DPL),锁定免费数据结构,互斥锁条件变量(这篇维基百科文章转发到' Monitor(同步) ',然后介绍了用于线程同步的新TMonitor记录类型并描述了它的一些方法.

是否有介绍文章,其中的示例显示了何时以及如何使用此Delphi记录类型?网上有一些文档.

  • TCriticalSection和TMonitor之间的主要区别是什么?

  • 我能做些什么与PulsePulseAll方法呢?

  • 它是否具有例如C#或Java语言的对应物?

  • RTL或VCL中是否有使用此类型的代码(因此它可以作为示例)?


更新:文章为什么在Delphi 2009中TObject的大小翻了一番?解释说现在可以使用TMonitor记录锁定Delphi中的每个对象,每个实例需要额外四个字节.

看起来TMonitor的实现类似于Java语言中的Intrinsic Locks:

每个对象都有一个与之关联的内在锁.按照惯例,需要对对象字段进行独占和一致访问的线程必须在访问对象之前获取对象的内部锁,然后在完成它们时释放内部锁.

等待,Delphi中的PulsePulseAll似乎是Java编程语言中wait(),notify()notifyAll()的对应物.如果我错了,请纠正我:)


更新2:生产者/消费者应用程序的示例代码,使用TMonitor.WaitTMonitor.PulseAll基于Java(tm)教程中有关保护方法的文章(欢迎评论):

这种应用程序在两个线程之间共享数据:生成器,创建数据,以及使用它的消费者.两个线程使用共享对象进行通信.协调是必不可少的:消费者线程不得在生产者线程交付之前尝试检索数据,并且如果消费者未检索旧数据,则生产者线程不得尝试传递新数据.

在此示例中,数据是一系列文本消息,通过Drop类型的对象共享:

program TMonitorTest;

// based on example code at http://download.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

type
  Drop = …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2009 delphi-2010 tmonitor delphi-xe

31
推荐指数
1
解决办法
1万
查看次数

Delphi中最快的XML解析器是什么?

我们有相当大的XML字符串,我们目前使用MSXML2进行解析

我刚刚尝试使用MSXML6希望提高速度,什么都没有!

我们目前创建了很多DOM文档,我想在不断与MSXML2/6 dll交互时可能会有一些开销

有没有人知道Delphi的更好/更快的XML组件?

如果有人可以提出替代方案,并且它更快,我们会考虑整合它,但这将是很多工作,所以希望结构不会与MSXML使用的结构太不一样

我们正在使用Delphi 2010

保罗

delphi delphi-2010

31
推荐指数
4
解决办法
2万
查看次数