我一直在浏览GoogleCode上的DeHL存储库,它看起来对我很好.
许多有趣的功能使基本编程任务更容易; DotNet FCL中的一些简洁的东西,但Delphi RTL中缺少的东西可以在这个库中找到;
以现代方式编码,充分利用新的语言功能;
每个类,记录类型,成员函数和参数都以这样的方式记录,它将在Delphi IDE的代码完成中显示;
组织良好,干净的代码;
大量的单元测试;
开源和免费;
基本上,看起来这个库应该包含在Delphi中,作为RTL的一部分.
一个主要缺点:该项目已经停产.:-(
现在我的问题是:
将这个库用于未来的项目是否安全,并将其作为基础框架来构建?
基本上我想听听那些真正使用过这个库的人是否值得花时间去了解这个库,以及为什么.
我是Delphi的新手,我正在尝试使用DEHL Collections库.(请参阅http://code.google.com/p/delphi-coll/)从IDE的角度来看,我遇到了一些麻烦.它编译并正确运行,但Delphi XE在我使用HashSet库的任何地方都显示错误.最大的不满是阻止我使用代码完成.
我得到错误的第一个位置是在对象声明中:
uses
SysUtils, Windows, Collections.Base, Collections.Sets, Collections.Lists,
adscnnct, adstable,
uOtherClass;
type
OneClass = class(OtherClass)
private
_bad: THashSet<string>; // THashSet underlined
_good: TList<string>; // No problems
end;
Run Code Online (Sandbox Code Playgroud)
错误指出:"类型参数与约束不匹配"
我不认为这是配置,因为我可以正常使用TList,但这是我如何设置它:我已经将库复制到Projects/Libs/DeHLCollections/Library并将库编译为Projects/Libs/bin.我已经将bin目录包含在我的全局库路径中,这使它可以编译并运行.我已经尝试将所有内容(/ libs,/ DeHLCollections,/ Library)添加到它中,以期让IDE帮助我,但它似乎没有帮助.
无论如何要解决这个问题,还是我只需要处理它?
使用DeHL Collections版本1.1.1.119
我在x64中找不到关于TVarData的任何解释.帮助中有一个页面,但似乎x64中的TVarData和x86中的TVarData不同.实际上我正在尝试为x64目标编译DEHL.但它在这一行上说"无效的类型转换":(来源是TVarData)
Big := TBigCardinalVarData(Source).BigCardinalPtr^;
Run Code Online (Sandbox Code Playgroud)
TBigCardinalVarData在这里:
TBigCardinalVarData = packed record
VType: TVarType;
Reserved1, Reserved2, Reserved3: Word;
BigCardinalPtr: PBigCardinal;
Reserved4: LongWord;
end;
Run Code Online (Sandbox Code Playgroud)
它在x86中编译,但它拒绝在x64中编译.我认为问题出在Word和LongWord变量中.但我还想不通.
我尝试使用Delphi 2010自定义属性调查DeHL,但出现问题。
TAppParamTest = class
public
User: string;
Password: string;
end;
TAppParam = class
private
FTest: TAppParamTest;
public
constructor Create;
destructor Destroy; override;
property Test: TAppParamTest read FTest write FTest;
end;
Run Code Online (Sandbox Code Playgroud)
这很好用:当我序列化时我有这个
<TAppParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:DeHL="http://alex.ciobanu.org/DeHL.Serialization.XML" DeHL:class="AppParam_unt.TAppParam" DeHL:refid="1">
<FTest DeHL:class="AppParam_unt.TAppParamTest" DeHL:refid="2">
<User>User</User>
<Password>Psw</Password>
</FTest>
</TAppParam
Run Code Online (Sandbox Code Playgroud)
但我想要这个:
<TAppParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:DeHL="http://alex.ciobanu.org/DeHL.Serialization.XML" DeHL:class="AppParam_unt.TAppParam" DeHL:refid="1">
<Test DeHL:class="AppParam_unt.TAppParamTest" DeHL:refid="2">
<User>User</User>
<Password>Psw</Password>
</Test>
</TAppParam
Run Code Online (Sandbox Code Playgroud)
所以我想在类中添加自定义属性:
TAppParam = class
private
[XmlElement('Test')]
FTest: TAppParamTest;
public
constructor Create;
destructor Destroy; override;
property Test: TAppParamTest read FTest …Run Code Online (Sandbox Code Playgroud)