我使用以下命令从sqlite3.c和BCC 55编译了SQLIte3数据库引擎:
bcc32.exe -jb -O2 -w- -K -c -6 -u- sqlite3.c
Run Code Online (Sandbox Code Playgroud)
生成了正确的sqlite3.obj文件.但是,一旦我尝试在我的Delphi应用程序中链接它,如下所示:
unit unt_SQLite3;
interface
uses
Windows;
implementation
{$LINK 'sqlite3.obj'}
end.
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
[DCC Error] E2065 Unsatisfied forward or external declaration: '__ftol'
[DCC Error] E2065 Unsatisfied forward or external declaration: '__lldiv'
[DCC Error] E2065 Unsatisfied forward or external declaration: '__llmod'
[DCC Error] E2065 Unsatisfied forward or external declaration: '_localtime'
[DCC Error] E2065 Unsatisfied forward or external declaration: '_strncmp'
[DCC Error] E2065 Unsatisfied forward or external declaration: '_memset'
[DCC Error] E2065 Unsatisfied …Run Code Online (Sandbox Code Playgroud) 我有一个Delphi应用程序,它在一些TTimer.OnTimer事件中产生了6个匿名线程.
如果我从标题栏中的X按钮关闭应用程序,则会引发地址$ C0000005处的访问冲突,并且FastMM报告泄漏的TAnonymousThread对象.
哪个是使用TThread.CreateAnonymousThread()方法在OnTimer事件中创建的Delphi中释放匿名线程的最佳方法?
解决方案对我有用:
创建了一个匿名线程的包装器,它在被Free-ed时终止它们.
type
TAnonumousThreadPool = class sealed(TObject)
strict private
FThreadList: TThreadList;
procedure TerminateRunningThreads;
procedure AnonumousThreadTerminate(Sender: TObject);
public
destructor Destroy; override; final;
procedure Start(const Procs: array of TProc);
end;
{ TAnonumousThreadPool }
procedure TAnonumousThreadPool.Start(const Procs: array of TProc);
var
T: TThread;
n: Integer;
begin
TerminateRunningThreads;
FThreadList := TThreadList.Create;
FThreadList.Duplicates := TDuplicates.dupError;
for n := Low(Procs) to High(Procs) do
begin
T := TThread.CreateAnonymousThread(Procs[n]);
TThread.NameThreadForDebugging(AnsiString('Test thread N:' + IntToStr(n) + ' TID:'), T.ThreadID);
T.OnTerminate := AnonumousThreadTerminate;
T.FreeOnTerminate := true; …Run Code Online (Sandbox Code Playgroud) 在Inno Setup中我有最终用户许可协议页面,其中包含"我接受协议"和"我不接受协议".
如何默认选中"我接受"单选按钮?
这是什么TForm.TipMode属性?
它已在Delphi XE3中添加,但文档中没有提及此属性.
Delphi 2010中的格式化程序对我来说真的很烦人.我更喜欢手动格式化我的代码.我相信我做得更好.
我该如何禁用它?
注意:不接受我不首先使用它的原因的答案.我需要它关闭.没有更多,没有更少.
我正在构建一个需要以下内容的小型多层面板:
您是否认为新的Delphi 2010 Datasnap可以在这种情况下成功使用,还是应该使用普通的旧TSocket?
在Windows中,我可以通过调用GetProcessMemoryInfo来获取Peak Memory的使用情况
function TProcess.Peek: Cardinal;
var
PMC: PPROCESS_MEMORY_COUNTERS;
PMCSize: Cardinal;
begin
PMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);
GetMem(PMC, PMCSize);
try
PMC^.cb := PMCSize;
if GetProcessMemoryInfo(FHandle, PMC, PMCSize) then
Exit(PMC^.PeakWorkingSetSize)
else
Exit(0);
finally
FreeMem(PMC);
end;
end;
Run Code Online (Sandbox Code Playgroud)
什么是Mac OS相当于这样做?
我想强制执行
{$SCOPEDENUMS ON}
Run Code Online (Sandbox Code Playgroud)
在项目中的所有单位.
目前我在单位声明后立即将其添加到每个单位:
unit unt_WotcSearch;
{$SCOPEDENUMS ON}
...
Run Code Online (Sandbox Code Playgroud)
有没有办法可以全局设置(例如在*.dpr文件或项目设置中),所以不需要将{$ SCOPEDENUMS ON}添加到数百个单位?
一个人可以使用
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.IOUtils.TPath.DirectorySeparatorChar
要么
是否有任何特殊的差异,使用System.IOUtils.Tath中的另一个部分的好处是更面向对象的接口?
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.SysUtils
在Delphi XE2中,自动生成的构建号功能现在使用某种日期和时间生成的值,如下所示:
2.4.4386.838
每次构建时最后两个数字都会更改,并且基于当前日期和时间:
Major = 2 (user defined)
Minor = 4 (user defined)
Release = 4386 (number of days since Jan 1 2000)
Build = 838 (number of seconds since 00:00:00)
Run Code Online (Sandbox Code Playgroud)
我想这个发布和构建数字的新格式是从.NET实现中借用的,它实现了非常相似的功能.在.net中,最后一个数字(Build)等于自当地时间午夜以来的秒数除以2.有关.net实现的详细信息,请参阅此链接:艰难地确定构建日期
如果可以依靠这种方式保持这种方式,那么现在我们有更好的方法来确定编译时间而不是
使用IDE插件
使用PE Headers hacks
问题不在于如何返回旧的自动增量版本号功能.
问题是 XE2是否确实使用了上面显示的日期和时间,从2010年1月1日开始,在Build和Release数字中添加了几天和几秒?
delphi ×9
delphi-xe2 ×3
delphi-2010 ×2
delphi-xe6 ×2
anonymous ×1
datasnap ×1
delphi-xe ×1
enums ×1
inno-setup ×1
io ×1
linker ×1
macos ×1
memory ×1
multiplayer ×1
parsing ×1
sqlite ×1
terminate ×1