Tag: delphi

使用UPX压缩Windows可执行文件有什么缺点吗?

我之前使用过UPX来减lessWindows可执行文件的大小,但是我必须承认,我对这种可能产生的负面影响是天真的。 所有这些包装/拆包的缺点是什么? 是否有任何人会推荐不UPX的可执行文件(例如,当编写一个DLL,Windows服务,或针对Vista或Win7时)? 我在Delphi中编写了大部分代码,但是我也使用UPX来压缩C / C ++可执行文件。 在附注中,我没有运行UPX来保护我的exe免受反汇编,只是为了减小可执行文件的大小,并防止粗略的篡改。

如何使用MSBuild和Delphi XE2构build

我一直在使用Delphi XE和MSBuild使用以下在batch file中正常工作的简单示例构build项目。 Project1是使用“File |”创build的空项目 新| | VCL在IDE中构build应用程序: call "c:\Program Files (x86)\Embarcadero\RAD Studio\8.0\bin\rsvars.bat" msbuild.exe /target:Build /p:config=Release "c:\scratch\test\project1.dproj" pause 如果我在Delphi XE2中创build了一个新的空项目,将其保存为project1.dproj(dproj与XE非常不同),然后运行以下命令: call "c:\Program Files (x86)\Embarcadero\RAD Studio\9.0\bin\rsvars.bat" msbuild.exe /target:Build /p:config=Release "c:\scratch\test\project1.dproj" pause 它给: Build FAILED. "c:\scratch\test\project7.dproj" (Build target) (1) -> c:\scratch\test\project7.dproj : error MSB4057: The target "Build" does not e xist in the project. 0 Warning(s) 1 […]

如何在Delphi应用程序中embeddedIE <n>以外的浏览器对象

使用默认的TWebBrowser可以轻松embeddedWeb浏览器。 不幸的是,默认进来的是IE <n>。 我想知道如何整合一个Gecko或WebKit之一。 有什么VCL例子吗? 如果不是的话,怎么去做呢? 哪里可以findembedded式格式的Gecko和/或WebKit的核心?

如何在Delphistring中转义字符

delphistring使用单引号,例如“一个有效的string”。 如何指定string中的字符? 如何引用空字节(Unicode代码点U + 0000)?

计算例程的速度?

什么是确定处理例程花费多长时间的最好和最准确的方法,例如函数过程? 我问,因为我目前正在试图优化我的应用程序中的几个function,当我testing的变化很难确定只是通过看它,如果有任何改进。 所以,如果我能够返回一个准确的或接近准确的时间来处理一个例程,那么对代码的更改做得如何,我会有一个更清晰的认识。 我考虑过使用GetTickCount,但我不确定这是否接近准确? 有一个可重用的函数/过程来计算一个例程的时间是非常有用的,并使用如下所示: // < prepare for calcuation of code … ExecuteSomeCode; // < code to test … // < stop calcuating code and return time it took to process 我期待听到一些build议。 谢谢。 克雷格。

为什么variables声明为TStrings并创build为TStringList?

为什么variables声明为TStrings并创build为TStringList ? 例如:var sl被声明为TStrings但被创build为TStringList var sl : TStrings; begin sl := TStringList.Create; // add string values… sl.Add( 'Delphi' ); sl.Add( '2.01' ); // get string value using its index // sl.Strings( 0 ) will return // 'Delphi' MessageDlg( sl.Strings[ 0 ], mtInformation, [mbOk], 0 ); sl.Free; end;

如何在Delphi 7 IDE中将方法挂接到Edit事件?

我想在Delphi 7 IDE中开始编辑文件时自动检出一个文件。 ClearCase是我的版本控制系统,我真的很讨厌在开始编辑之前需要检出一个文件。 它总是打破我的思想stream:我试图解决一个问题,find我需要改变的地方,尝试编辑它,失败,因为文件是只读的,打开clearcase,search文件,最后结帐,尝试编辑文件再次失败,因为IDE仍然认为它是只读的,告诉不是只读的IDE。 当我终于回到代码,我忘记了我正在尝试做什么。 我发现了这个漂亮而简单的ClearCase IDE集成代码 。 它工作,但使用不赞成的ToolIntf单位。 我已经添加了几个快捷键。 这里是它的简化版本 (没有尝试编译): unit clearcase; interface uses ToolsApi, ToolIntf; implementation uses Windows, Dialogs, Classes, ExptIntf, Menus, ShellApi, SysUtils; type TDelphiClearcase = class private FClearcaseMenu, FDoCheckOutPasDfm, FDoCheckInPasDfm : TIMenuItemIntf; procedure ExecCommand(const command: string; path: PChar = nil); public destructor Destroy;override; procedure DoClick(Sender: TIMenuItemIntf); property ClearcaseMenu: TIMenuItemIntf […]

线程closures期间Win64 Delphi RTL中的内存泄漏?

很长一段时间,我注意到我的服务器应用程序的Win64版本泄漏内存。 虽然Win32版本在相对稳定的内存占用情况下工作正常,但是64位版本使用的内存有规律地增加 – 也许20Mb /天,没有任何明显的原因(不用说,FastMM4没有报告任何内存泄漏) 。 源代码在32位和64位版本之间是相同的。 该应用程序是围绕Indy TIdTCPServer组件构build的,它是一个连接到数据库的高度multithreading服务器,该数据库处理由Delphi XE2制作的其他客户端发送的命令。 我花了很多时间审查我自己的代码,并试图了解为什么64位版本泄漏了这么多的内存。 我最终通过使用MS工具来追踪DebugDiag和XPerf之类的内存泄漏,似乎在Delphi 64位RTL中存在一个根本的缺陷,每当线程从DLL中分离出来,都会导致一些字节被泄漏。 此问题对于必须全天候运行而不重新启动的高度multithreading应用程序尤其关键。 我用由XE2构build的主机应用程序和库组成的非常基本的项目重现了这个问题。 该DLL与主机应用程序静态链接。 主机应用程序创build线程,只是调用虚拟导出的过程并退出: 这里是库的源代码: library FooBarDLL; uses Windows, System.SysUtils, System.Classes; {$R *.res} function FooBarProc(): Boolean; stdcall; begin Result := True; //Do nothing. end; exports FooBarProc; 主机应用程序使用计时器来创build一个只调用导出过程的线程: TFooThread = class (TThread) protected procedure Execute; override; public constructor Create; end; … function FooBarProc(): […]

使对话框与“大字体”兼容。

你认为哪种最佳做法可以使标准字体(96 dpi)和“大字体”设置(120 dpi)兼容,从而使对象不会重叠或被切断? 顺便说一句:以防万一它是相关的,我有兴趣这样做的Delphi对话框。 提前致谢!

为什么Delphi的编译速度会降低开放时间,我能做些什么呢?

我的公司在delphi运行了一个大型项目十多年。 我们的代码库多年来一直在增长,现在已经达到了400万行代码。 编译速度正在成为一个问题。 我们花了时间去除单位循环引用(一个已知的编译速度慢的原因),并检查了设置的每个方面。 这一点我们无法用我们能够控制的东西进一步实现。 目前,在一台运行Windows XP SP3和Delphi 2006的4核处理器上,启动Delphi并重新编译,需要40秒。 那么,如果我们立即在同一个delphi会议上再做一个完整的构build,则需要1个40秒。 再次做一个完整的构build,它会变得更糟。 等等等等。 (我们很清楚Windows本身caching文件,这对编译速度有很大的影响,上面的数据是基于文件被caching的,我们通过Delphi编译这个项目来设置这个场景,终止它,然后开始一个新的Delphi会话,所以40秒看起来并不慢,只是因为这些文件被Windowscaching,而我们这样做是为了进行苹果对苹果的比较。 令我们困惑的是为什么编译速度变得更糟。 (过去我们观察到,如果这个项目有很多单位的循环引用,那么速度就会变慢。)如果我们终止Delphi并开始一个新的会话,编译时间将回到40秒。 更有意思的是,我们可以通过点击“取消”button中止编译,然后立即完成全部构build,从而达到相同的速度“改善”。 编译时间也会回到40secs。 在我们看来,delphi自己的单元依赖caching效率不如从头开始构build,而且随着时间的推移而变得越来越糟糕。 它也出现取消button不知何故清除此caching。 我们的想法是,如果我们可以利用Delphi IDE子系统来完成这个清理工作,我们总是可以保持编译速度达到最高性能。 但我们不知道如何。 有谁知道我们可以做什么? 我们还在使用Delphi 2006,因为我们还没有find一个将我们的大型项目移植到Unicode的可行方法。 我在论坛上看到,最新的Delphi XE在单元循环引用方面performance出类似的编译速度问题。 任何人都知道delphiXE是否解决了这个问题? ps我们也知道把项目拆分成运行时包可以减less编译时间。 但是出于部署和pipe理的原因,我们尽量避免使用运行时软件包。