如RAD Studio docwiki中所述,要将32位VCL应用程序迁移到64位:
在IDE中打开32位应用程序,添加并激活64位目标平台,并将应用程序编译为64位应用程序.
我有一个项目组,包含超过200个32位项目.为了支持64位,我需要逐个添加64位目标平台.
是否有更快的方法来添加64位目标平台?
在Delphi XE2中,我们使用了
{$ifdef Win32}
{$ifdef Win64}
Run Code Online (Sandbox Code Playgroud)
确定我们所处的平台.
是否有任何预定义的条件可以识别VCL和FMX?
当我弹出Delphi项目的构建配置的上下文菜单时,我看到"Make","Build"和"Clean"的菜单项.
"Make"和"Build"之间有什么不同?似乎两者都执行相同的任务.
我在我的Delphi应用程序中使用FastMM跟踪内存泄漏,尤其是在FullDebugMode中.使用Delphi XE2的新版本,我们可以使用FastMM作为内存管理器吗?FastMM可以与Win64平台一起使用吗?
Unit FastCodePatch.pas在Win32平台上运行.Delphi XE2支持Win64平台,任何想法如何让FastCodePatch在Win64平台上运行?
unit FastcodePatch;
interface
function FastcodeGetAddress(AStub: Pointer): Pointer;
procedure FastcodeAddressPatch(const ASource, ADestination: Pointer);
implementation
uses
Windows;
type
PJump = ^TJump;
TJump = packed record
OpCode: Byte;
Distance: Pointer;
end;
function FastcodeGetAddress(AStub: Pointer): Pointer;
begin
if PBYTE(AStub)^ = $E8 then
begin
Inc(Integer(AStub));
Result := Pointer(Integer(AStub) + SizeOf(Pointer) + PInteger(AStub)^);
end
else
Result := nil;
end;
procedure FastcodeAddressPatch(const ASource, ADestination: Pointer);
const
Size = SizeOf(TJump);
var
NewJump: PJump;
OldProtect: Cardinal;
begin
if VirtualProtect(ASource, Size, PAGE_EXECUTE_READWRITE, OldProtect) then
begin
NewJump := …Run Code Online (Sandbox Code Playgroud) 我将Windows 7字体大小设置为中等(125%).当我打开表单Delphi XE2 IDE时,DFM文件中的PixelsPerInch总是自动设置为120.在Windows中使用较小的字体大小(100%)使得Delphi DFM文件中的PixelsPerInch为96.
这在团队环境中编码时会产生问题.大多数团队成员使用较小的字体大小(100%或96 PPI).存储在版本控制存储库中的所有DFM文件都使用96 PPI.如果我将使用120 PPI的DFM文件提交到存储库,则所有其他团队成员将对我更改为DFM文件的内容感到困惑.与尺寸,宽度或高度相关的所有属性都将更改.
在使用120 PPI窗口环境时,是否可以强制Delphi IDE将DFM保存在96 PPI中?
我有一个使用TDictionary的案例:
var D: TDictionary<string, integer>;
begin
D := TDictionary<string, integer>.Create(TCustomEqualityComparer.Create());
try
D.Add('One', 1);
D.Add('Two', 2);
D.Add('Three', 3);
showmessage(inttostr(D.Items['One']));
showmessage(inttostr(D.Items['TWO']));
finally
D.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
从Generics Defaults TEqualityComparer(Delphi)复制类TCustomEqualityComparer,对GetHashCode方法进行微小修改:
TCustomEqualityComparer = class(TEqualityComparer<string>)
public
function Equals(const Left, Right: string): Boolean; override;
function GetHashCode(const Value: string): Integer; override;
end;
function TCustomEqualityComparer.Equals(const Left, Right: string): Boolean;
begin
Result := SameText(Left, Right);
end;
function TCustomEqualityComparer.GetHashCode(const Value: string): Integer;
begin
Result := BobJenkinsHash(Value[1], Length(Value) * SizeOf(Value[1]), 0);
end;
Run Code Online (Sandbox Code Playgroud)
我希望TCustomEqualityComparer能够对键值执行不区分大小写的匹配.例如:
D.Items['TWO']
Run Code Online (Sandbox Code Playgroud)
但是,我收到"找不到项目"的例外情况.我使用的是Delphi 2010版本14.0.3513.24210.
有谁知道我的代码有什么问题?
我想知道我们是否能够将SQlite库嵌入到Delphi可执行文件中,我们可以将我们的应用程序部署为单个.exe文件而不需要任何SQlite dll文件.
嵌入不是将sqlite dll文件保存到资源中,而是链接到Delphi可执行文件.
我正在使用Delphi XE2编写DataSnap REST服务.我注意到DataSnap中的REST URI必须严格遵循这种格式(请参阅此处):
http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*
Run Code Online (Sandbox Code Playgroud)
一个着名的例子是DataSnap服务器向导创建的示例方法:
http://my.site.com/datasnap/rest/TServerMethods1/ReverseString/ABC
Run Code Online (Sandbox Code Playgroud)
在URI中提供参数有两种常用方法:
DataSnap REST肯定支持Path Segment参数URI.DataSnap REST中是否支持查询字符串参数URI?
我有以下REST URI示例,发现它似乎不可能使它适用于当前的DataSnap REST库:
/客户/ A1234
返回ID为A1234的客户对象
/customers/A1234.xml
以XML格式返回ID A1234的客户对象
/customers/A1234.json
以json格式返回ID A1234的客户对象
/customers/A1234.html
以html格式返回ID A1234的客户对象
/客户?NAME =比尔
返回名称中包含Bill的客户列表
安装Delphi XE2后,我尝试命令行编译dcc32.exe来编译一个简单的程序:
program test;
uses SysUtils;
begin
end.
Run Code Online (Sandbox Code Playgroud)
命令行编译器显示错误:
c:> dcc32.exe test.dpr
Embarcadero Delphi for Win32编译器版本23.0版权所有(c)1983,2011 Embarcadero Technologies,
Inc.test.dpr(3)致命:F1026未找到文件:'SysUtils.dcu'
这不会发生在Delphi XE上.