有没有办法在D2010中迭代对象的成员变量而不事先知道它们是什么?
我想知道该xercesxmldom单元作为XML DOM实现之一发生了什么.
它似乎在Delphi XE中消失了.
为什么?
(我搜索了文档;找不到关于xercesxmldom消失的任何相关信息).
编辑:这些是我存档的来源:
R:\>dir /s /b xercesxmldom.pas
R:\D2006-Enterprise-D10-BDS-4.0\source\Win32\xml\xercesxmldom.pas
R:\D2007-Enterprise-D11-RadStudio-5.0\source\Win32\xml\xercesxmldom.pas
R:\D2009-Enterprise-D12-RadStudio-6.0\source\Win32\xml\xercesxmldom.pas
R:\D2010-Enterprise-D14-RadStudio-7.0\source\Win32\xml\xercesxmldom.pas
R:\D7.01.Architect\Source\Xml\xercesxmldom.pas
Run Code Online (Sandbox Code Playgroud)
R:\DXE-Enterprise-D15-RadStudio-8.0源树中没有任何内容......
--jeroen
记录时,总是会纠缠于字符串文字中.
我解决了很好的性能,通过传递一个字段和变量Expression<Func<T>> expression(如解释在这里),所以你可以做这样的事情:
public void Demo(string someArgument)
{
LogFrameWork.LogLine("Demo"); // goal is to get rid of these string literals
LogFramework.Log(() => someArgument);
}
Run Code Online (Sandbox Code Playgroud)
我想为方法Demo本身做类似的事情:
public void Demo(string someArgument)
{
LogFramework.Log(this.Demo);
}
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情:
public static void Log(Delegate method)
{
string methodName = method.Method.Name;
LogLine(methodName);
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
public static void Log(Action method)
{
string methodName = method.Method.Name;
LogLine(methodName);
}
Run Code Online (Sandbox Code Playgroud)
但我得到这样的编译器错误:
Argument 1: cannot convert from 'method group' to 'System.Delegate'
Argument 1: cannot convert from 'method group' …Run Code Online (Sandbox Code Playgroud) 每隔几周,我就会碰到这一点:当在Delphi项目中对使用单元进行IDE操作时,它会破坏.dpr文件.
会发生什么,它重建uses列表,但错误的位置.
我想知道要避免哪种使用模式,所以我不会再次遇到这个错误.
我在许多Delphi版本中都出现过这种错误.我知道它至少存在于Delphi XE2(今天又发生在那里),XE,2007,2006和7.
受损的片段通常是这样构造的:
ususes
Forms,
..
LastUnitInUses in 'LastUnitInUses.pas';
R *.RES}
Run Code Online (Sandbox Code Playgroud)
并应删除一个us,并添加一个{$:
uses
Forms,
..
LastUnitInUses in 'LastUnitInUses.pas';
{R *.RES}
Run Code Online (Sandbox Code Playgroud)
出错的示例文件:
program SysUtilsFormatTests;
{
Delphi DUnit Test Project
-------------------------
This project contains the DUnit test framework and the GUI/Console test runners.
Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
to use the console test runner. Otherwise the GUI test runner will be used by
default.
} …Run Code Online (Sandbox Code Playgroud) 鉴于bin\内部德尔福项目中包含的文件目录Cert.pem和Key.pem低于德尔福后生成事件的唯一副本,如果这两个文件C:\Binaries\Cert.pem不存在:
if not exist $(OUTPUTDIR)Cert.pem (copy bin\Cert.pem $(OUTPUTDIR))
if not exist $(OUTPUTDIR)Key.pem (copy bin\Key.pem $(OUTPUTDIR))
Run Code Online (Sandbox Code Playgroud)
一旦C:\Binaries\Cert.pem存在,Key.pem永远不会复制该文件.
如何在后期制作活动中解决这个问题?
编辑:与我的2014年帖子不同,这确实可以使用括号.请参阅下面的答案.
我想像vista和xp中的Get / SetMasterVolume一样以编程方式调整音量吗?使用mmsystem单位?
可以在Delphi 5中用自定义值声明枚举吗?
type
MyEnum = (meVal1 = 1, meVal2 = 3); // compiler error
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在使用Delphi XE Starter.我创建了一个CCs.RC文件并将该文件添加到项目中.我的CCs.RC文件中的典型行如下所示:
Danish1cc Text Danish1.cc
Run Code Online (Sandbox Code Playgroud)
直接在我添加的实施线之后
{$R CCs}
Run Code Online (Sandbox Code Playgroud)
当我尝试将此文件读入现有的字符串列表时,我收到一条[EResNotFound][1]错误消息.这是我用来尝试读取文件的代码:
procedure LoadStringListFromResource(const ResName: string;SL : TStringList);
var
RS: TResourceStream;
begin
RS := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
SL.LoadFromStream(RS);
finally
RS.Free;
end;
end;
///
LoadStringListFromResource('Danish1cc',MySL)
Run Code Online (Sandbox Code Playgroud)
我的目标是将文件嵌入我的EXE中,当然能够阅读它:)感谢您的帮助.
当您必须使用不同的IDE维护不同的项目时,将它们安装在同一台Windows计算机上通常是有意义的.
例如,在同一系统上混合Visual Studio和Delphi,或各种版本的Delphi(我确信其他版本甚至有不同的组合).
你会发现其中一件事是最新工具将自己安装为JIT调试器:应用程序崩溃时触发的即时调试器.
根据应用程序崩溃的工具和版本(有时在调试器内运行时无法重现错误,例如Heisenbug),您需要提前选择调试器.
你怎么能这样做?
考虑低于该编译并在Delphi 6.当我恢复动态字符串数组没有错误运行,而不是看到空数组的代码SA,我看到的1与含有一个空字符串的单个元件的长度的数组.为什么这样,我如何安全地将NIL动态数组分配给Variant并正确恢复?这是代码:
TDynamicStringArray = array of string;
var
V: Variant;
sa: TDynamicStringArray;
begin
sa := nil;
V := sa;
sa := V;
OutputDebugString('sa has a single element now with an empty string in it when I expect it to be empty.');
end;
Run Code Online (Sandbox Code Playgroud)