这个计划
{$APPTYPE CONSOLE}
{$TYPEDADDRESS ON}
uses
Winapi.Windows;
procedure Foo(P: PDWORD);
begin
end;
procedure Bar;
var
dw: DWORD;
begin
Foo(@dw);
end;
begin
end.
Run Code Online (Sandbox Code Playgroud)
在XE3中编译,但在XE4,XE5,XE6和XE7中不编译.错误发生在
Foo(@dw);
Run Code Online (Sandbox Code Playgroud)
[dcc32 Error] E2010 Incompatible types: 'PDWORD' and 'Pointer'
这感觉很奇怪.因此,经过一番挖掘,似乎问题归结为PDWORD.人们可能自然会认为它会是:
PDWORD = ^DWORD;
Run Code Online (Sandbox Code Playgroud)
事实上,XE3就属于这种情况.在以后的版本中,我们发现:
// Note: Not ^DWORD yet
PDWORD = ^CppULongInt;
Run Code Online (Sandbox Code Playgroud)
奇.那么,是什么CppULongInt?
CppULongInt = type LongWord;
{$EXTERNALSYM CppULongInt 'unsigned long'}
{$OBJTYPENAME CppULongInt 'Bul' 'Gm'}
Run Code Online (Sandbox Code Playgroud)
然后看着DWORD我们发现的声明:
//NOTE: DWORD should really be CppULongInt
DWORD = LongWord;
Run Code Online (Sandbox Code Playgroud)
所以,CppULongInt并且DWORD是不同的类型.因此编译错误.
这里发生了什么?目的是 …
我在我的表单中使用TListView(继承自TCustomListView),当我将ListView样式更改为"vsSmallIcon"时,图标排列得很糟糕.自从我们将我们的代码从Borland 2006移植到XE4以来,我们发现了这个问题.休息所有"ViewStyle"就像vsIcon,vsList和vsReport一样正常.有没有人遇到与VCL的TlistView组件类似的问题?我已经尝试了ListView1-> Arrange(arDefault)和'AutoArrange'图标选项,但似乎没有任何东西可用于'vsSmallIcon'TViewStyle.
我在Windows 7上使用RAD Studio XE4和Update1.
谢谢,
Santosh Thankachan
PS:添加了一个图像来显示vsSmallIcon TViewStyle的这个问题.

//SmallIconIssue.h
#ifndef SmallIconsIssueH
#define SmallIconsIssueH
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ImgList.hpp>
#include <Vcl.ComCtrls.hpp>
class TSmallIconTest : public TForm
{
__published: // IDE-managed Components
TImageList *ImageList1;
TComboBox *ComboBox1;
TListView *ListView1;
TLabel *Label1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall ComboBox1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TSmallIconTest(TComponent* Owner);
};
extern PACKAGE TSmallIconTest *SmallIconTest;
#endif
//SmallIconIssue.cpp
#pragma package(smart_init)
#pragma resource "*.dfm"
TSmallIconTest …Run Code Online (Sandbox Code Playgroud) 使用适用于iOS平台的Delphi XE4,引入了一种新的字符串类型:不可变的基于零的字符串.到目前为止,Delphi在写可变字符串上有副本.所以问题是,这对我未来的编程意味着什么?一种字符串类型比另一种字符串有什么优势吗?当切换到新的字符串类型时,我需要注意哪些陷阱(除了明显的0对1基数)?
我今天在测试时遇到了一个奇怪的情况.
我有很多接口和对象.代码如下所示:
IInterfaceZ = interface(IInterface)
['{DA003999-ADA2-47ED-A1E0-2572A00B6D75}']
procedure DoSomething;
end;
IInterfaceY = interface(IInterface)
['{55BF8A92-FCE4-447D-B58B-26CD9B344EA7}']
procedure DoNothing;
end;
TObjectB = class(TInterfacedObject, IInterfaceZ)
procedure DoSomething;
end;
TObjectC = class(TInterfacedObject, IInterfaceY)
public
FTest: string;
procedure DoNothing;
end;
TObjectA = class(TInterfacedObject, IInterfaceZ, IInterfaceY)
private
FInterfaceB: IInterfaceZ;
FObjectC: TObjectC;
function GetBB: IInterfaceZ;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
property BB: IInterfaceZ read GetBB implements IInterfaceZ;
property CC: TObjectC read FObjectC implements IInterfaceY;
end;
procedure TObjectB.DoSomething;
begin
Sleep(1000);
end;
procedure TObjectA.AfterConstruction;
begin
inherited;
FInterfaceB := TObjectB.Create; …Run Code Online (Sandbox Code Playgroud) 谁能解释这个屏幕:

正如你所看到的,我有简单的数组 - 当我使用A [0],A 1时,调试器显示其元素的值...但我无法获得具有局部变量A [i]的 元素(但是"i"的值正确显示).
项目设置:
调试信息:ON
本地符号:ON
优化:OFF.
项目(一个PAS文件)是BUILD,所以DCU是新鲜的.您可以在该屏幕上看到此测试项目的几乎完整代码,因此不可能在其他单元等中声明数组A或"i"...
现在我检查了 - Delphi XE3中的相同代码完美运行 - 调试器显示所有值.似乎XE4在基本功能方面存在严重错误: - ((
在ARC管理下使用Delphi for iOS终止线程的正确方法是什么?
举个简单的例子:
TMyThread = class(TThread)
protected
procedure Execute; override;
public
destructor Destroy; override;
end;
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
FThread: TMyThread;
public
end;
{ TMyThread }
destructor TMyThread.Destroy;
begin
ShowMessage('Destroy');
inherited Destroy;
end;
procedure TMyThread.Execute;
begin
Sleep(5000);
end;
{ TForm2 }
procedure TForm2.Button1Click(Sender: TObject);
begin
FThread := TMyThread.Create(TRUE);
FThread.FreeOnTerminate := TRUE;
FThread.Start;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
ShowMessage(FThread.RefCount.ToString);
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
FThread …Run Code Online (Sandbox Code Playgroud) FMX控件没有颜色属性.什么是FMX相当于VCL.TColor?
FMX.Panel1.Color:= clBlack
我正在尝试安装一个名为JamShellBrowser的商业组件,但它不会安装.
我联系了开发人员,但同时我想知道:
我检查了IDE的帮助,但是我找不到任何关于vrc文件的内容,我搜索了Delphi vrc并没有找到任何可以帮助我的东西.
错误消息是:
检查项目依赖性......
编译JamShellDelphiXE4.dproj(Release,Win32)
"JamShellDelphiXE4.vrc"的brcc32命令行
c:\ program files(x86)\ embarcadero\rad studio\11.0\bin\cgrc.exe -c65001 JamShellDelphiXE4.vrc -foJamShellDelphiXE4.res
[BRCC32错误] JamShellDelphiXE4.vrc(2):找不到文件:JamShellDelphiXE2_Icon.ico
失败
经过时间:00:00:00.1
我在组件文件夹中搜索了一个ico文件,但没有...因此消息,但即使我MAINICON ICON "JamShellDelphiXE2_Icon.ico"从vrc文件中删除该行甚至删除vrc文件,它在我尝试安装时自动生成.
几个月前我从Delphi 2010转移到了XE4并注意到了新的vrc文件,但我不知道它是什么或如何处理这些文件.
我正在努力将一些Delphi 7代码移植到XE4,因此,unicode就是这里的主题.
我有一个方法,其中一个字符串被写入TMemoryStream,所以根据这篇embarcadero文章,我应该将字符串的长度(以字符为单位)乘以Char类型的大小,以获得所需的字节长度. WriteBuffer的长度(以字节为单位)参数.
所以之前:
rawHtml : string; //AnsiString
...
memorystream1.WriteBuffer(Pointer(rawHtml)^, Length(rawHtml);
Run Code Online (Sandbox Code Playgroud)
后:
rawHtml : string; //UnicodeString
...
memorystream1.WriteBuffer(Pointer(rawHtml)^, Length(rawHtml)* SizeOf(Char));
Run Code Online (Sandbox Code Playgroud)
我对Delphi的UnicodeString类型的理解是它内部是UTF-16.但我对Unicode的一般理解是,即使是2个字节也不能表示所有unicode字符,有些角落外壳字符将占用4个字节.embarcadero的另一篇文章似乎证实了我的怀疑,"事实上,一个Char等于两个字节甚至不总是这样!"
所以...这让我想知道是否Length(rawHtml)* SizeOf(Char)真的足够稳健以保持一致的准确性,或者是否有更好的方法来确定更准确的字符串大小?
我有一个这样的列表:
FMyScheduleList: TObjectList<TMySchedule>;
Run Code Online (Sandbox Code Playgroud)
它有一个属性:
property ADate: TDate read FDate write FDate;
Run Code Online (Sandbox Code Playgroud)
如何通过此属性对列表进行排序?
delphi ×10
delphi-xe4 ×10
debugging ×1
firemonkey ×1
icons ×1
interface ×1
ios ×1
sorting ×1
tlistview ×1
unicode ×1