我有一个例程,可以将文件转换为不同的格式并保存.原始数据文件已编号,但我的例程根据原始文件中的内部名称为输出提供文件名.
我试图在一个完整的目录上批量运行它,它工作正常,直到我点击一个内部名称中有斜杠的文件.哎呀!如果它在这里,它可以很容易地在其他文件上.是否存在RTL(或WinAPI)例程,它将清理字符串并删除无效符号,以便可以安全地用作文件名?
假设我想在网站上写一些文章,并发布指向所讨论的Android应用程序的链接(可在Google Play上找到).
是否有标准方法为此应用程序创建"徽章",显示应用程序的名称,图标,描述,评级,下载/安装计数?像这样的东西:

或这个:

或这个:

我找到了Google Play徽章生成器,但这个"徽章生成器"没有做任何特别的事情,它只是一个虚拟静态图像.除此之外,我找不到任何东西.
有一篇由Raymond Chen 撰写的文章,他通过吃护页异常来讲述IsBadXxxPtr功能有多糟糕.
我不太明白它是如何应用于Delphi的.谁和如何正常(即不调用IsBadXxxPtr)处理此异常?我知道Delphi插入一个代码(例如)访问大型静态数组的内存 - 正是出于这个原因:扩展堆栈.
但是如果提出了防护页面异常:谁将在Delphi应用程序中处理它?我不能用不合适的方式使用try/except来意外地弄乱它吗?Delphi的调试器会通知我这些异常吗?
我需要在完成SysUtils单元后执行我的代码.
我已将我的代码放在单独的单元中,并将其首先包含在dpr-file的uses子句中,如下所示:
project Project1;
uses
MyUnit, // <- my separate unit
SysUtils,
Classes,
SomeOtherUnits;
procedure Test;
begin
//
end;
begin
SetProc(Test);
end.
Run Code Online (Sandbox Code Playgroud)
MyUnit看起来像这样:
unit MyUnit;
interface
procedure SetProc(AProc: TProcedure);
implementation
var
Test: TProcedure;
procedure SetProc(AProc: TProcedure);
begin
Test := AProc;
end;
initialization
finalization
Test;
end.
Run Code Online (Sandbox Code Playgroud)
请注意,MyUnit没有任何用途.
这是通常的Windows exe,没有控制台,没有表单,并使用默认的运行时包进行编译.MyUnit不是任何软件包的一部分(但我也尝试过使用它).
我希望MyUnit的finalization部分将在SysUtils的finalization部分之后执行.这是德尔福的帮助告诉我的.
然而,这并非总是如此.
我有2个测试应用程序,它们在使用中列出的Test例程/ dpr文件和单元中的代码略有不同.但是,MyUnit在所有情况下都列在第一位.
一个应用程序按预期运行:Halt0 - > FinalizeUnits - > ......其他单位...... - > SysUtils的终结 - > MyUnit的终结 - > ......其他单位......
但第二个不是.在SysUtils完成之前调用MyUnit 的终结.实际的调用链如下所示:Halt0 - > FinalizeUnits - > …
我已经创建了一个包含组件注册的设计包(组件本身在运行时)和一些IDE菜单项.
如果我从项目经理单击上下文菜单中的"安装"菜单项 - 包将被加载并正常工作(始终).
如果我关闭IDE并重新启动它 - 可能已加载包或可能未加载包.随机看似.但它通常不会加载,而不是加载.
如果我去组件/安装包 - 我在列表中看到我的包,复选框被选中,"组件"按钮显示我的包中的组件,但包的可执行文件本身甚至没有在IDE中加载!(我已通过Process Explorer验证了这一点).重新安装(删除包 - >确定 - >组件/安装包 - >添加 - >确定)没有帮助.但是从项目管理器中的项目的上下文菜单中卸载/安装 - 总是有帮助的.
我已经将OutputDebugString添加到包中每个模块的初始化部分.我发现初始化部分不会运行.
运行时包与设计时包在同一文件夹中.文件夹位于PATH环境变量中.我还尝试将包放在Delphi的Bin文件夹中.没有错误消息.没有奇怪/诊断的OutputDebugStrings.
有任何想法吗?
PS我在两台不同的机器上有这种行为.一个是Win7,另一个是WinXP SP 2.
PPS我无法在Delphi 7上重现这种行为.相同的包,重新编译D7总是加载.
我在谈论一些像http://uservoice.com/这样的网站的东西 你能建议任何其他类似的服务,网站或者可能(甚至更好)在自己的服务器上部署的现成引擎吗?
实际上,更多关于系统的问题,可以安装在您自己的服务器上.
我有这个令人讨厌的虫子在过去消失了,但现在经过一段时间它又回来了.
我有两个TSam对象(派生自TPersistent)创建并加载到TAsmJob对象(从TObjectList派生).
在运行时,表单创建一个TStringGrid,然后创建AsmJob,它创建这两个SAM对象(并从每个对象的磁盘加载一些数据).AsmJob也被分配给网格.当表单被销毁时,Grid通过释放它来处理AsmJob,从而释放TSam对象.这是问题所在:第一个对象没有问题,但第二个对象在调用其继承方法(在Destroy析构函数中)时会死掉.
我在整个程序中使用FreeAndNil来释放对象.TSam对象不是NIL !!!!! 所以,这是第一次释放对象的尝试.甚至对象内部的数据也是一致的.
该计划的主干如下:
**Create:**
Form -> StringGrid
-> AsmJob -> Sam1, Sam2
StringGrid.AsmJob:= AsmJob;
**Free:**
Form -> StringGrid -> AsmJob -> Sam1, Sam2
Run Code Online (Sandbox Code Playgroud)
我真的不明白在它被释放后我试图双重释放或覆盖对象的位置.
编辑:
我得到的一些错误:
FastMM在空闲块扫描操作期间检测到错误.FastMM在释放后检测到块已被修改.
FastMM在空闲块扫描操作期间检测到错误.块头已损坏.
详情:
The current thread ID is 0x19C, and the stack trace (return addresses) leading to this error is:
402E77 [System][@FreeMem]
4068DC [System][@DynArrayClear]
405E2D [System][@FinalizeArray]
405D31 [System][@FinalizeRecord]
40432F [System][TObject.CleanupInstance]
404272 [System][TObject.FreeInstance]
404641 [System][@ClassDestroy]
4D313E [UnitSam.pas][TSam.Destroy][297]
4042BF [System][TObject.Free]
4149ED [SysUtils][FreeAndNil]
4D9C0A [UnitAsmJob.pas][UnitAsmJob][TAsmJob.Destroy][180]
Run Code Online (Sandbox Code Playgroud)
我在IDE中启用了所有"调试"选项,包括"范围检查".此外,FastMM4设置为超级激进的调试模式.如果没有FastMM或者在调试器之外,程序运行得很好 - 但我知道这并不意味着错误不再存在.实际上它(可能)工作了一年多,直到我安装了FastMM.
编辑:
感谢大家.不,我感觉我正朝着好的方向前进.
程序的结构更复杂我只提供了保持原始帖子小的骨干.但是,它已经变大了:)所以,那些TSam对象用于从磁盘加载数据.每个对象中有一个文件.他们还在进行一些处理和数据验证.对于这些TSam中的每一个,我还有一个图形对象,在屏幕上(图形地)显示TSam对象中包含的数据.TStringGrid中的每一行也以TSam显示数据,但是以文本方式显示.
我有一个问题:如果我以较小的碎片打破程序以找出错误的位置,错误仍会出现?或者只能在此特定配置中出现?
回答"如何将AsmJob分配给TStringGrid,以便TStringGrid破坏AsmJob,你能告诉我们吗?" …
我想通过ShellExecute函数启动默认的电子邮件客户端应用程序.
即我写这样的东西:
ShellExecute(0,'mailto:example@example.com?subject = example&body = example',...);
如何在主题和正文中编码非美国字符?
我不能使用默认的ANSI代码页,因为字符可以是任何东西:汉字,西里尔字母或其他东西.
PS备注:
我在AQTime中使用了Performance Profiler.尝试在IDE下运行它(使用Embarcadero RAD Studio XE).检查过这些代码的项目崩溃:
// Setting a Thread Name (Unmanaged):
// http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.71).aspx
procedure _NameThreadForDebugging(const ATID: Cardinal; const AThreadName: String);
type
TThreadNameInfo = record
FType: LongWord; // must be 0x1000
FName: PAnsiChar; // pointer to name (in user address space)
FThreadID: LongWord; // thread ID (-1 indicates caller thread)
FFlags: LongWord; // reserved for future use, must be zero
end;
var
ThreadNameInfo: TThreadNameInfo;
ThreadName: AnsiString;
begin
// Applicable only for debugged applications
if IsDebuggerPresent then
begin
FillChar(ThreadNameInfo, SizeOf(ThreadNameInfo), 0);
ThreadName …Run Code Online (Sandbox Code Playgroud) 删除程序的对应部分是否可以用于宽字符串?或者我应该只使用复制并连接生成的WideStrings?
delphi ×7
unicode ×2
android ×1
aqtime ×1
delphi-2006 ×1
delphi-2010 ×1
delphi-7 ×1
delphi-xe ×1
exception ×1
fastmm ×1
feedback ×1
filenames ×1
finalization ×1
formatting ×1
google-play ×1
html ×1
mailto ×1
packages ×1
sanitization ×1
validation ×1
voting ×1
widestring ×1
winapi ×1