小编Ive*_*aev的帖子

链接sqlite3.obj会发出不满意的前向声明错误

我使用以下命令从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 sqlite linker delphi-xe

8
推荐指数
1
解决办法
2351
查看次数

如何在应用程序关闭时终止Delphi中的匿名线程?

我有一个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)

delphi multithreading anonymous terminate delphi-xe2

8
推荐指数
2
解决办法
1万
查看次数

Inno脚本 - 如何在默认选择的EULA页面上制作"我接受协议"单选按钮

在Inno Setup中我有最终用户许可协议页面,其中包含"我接受协议"和"我不接受协议".

如何默认选中"我接受"单选按钮?

inno-setup

8
推荐指数
1
解决办法
2284
查看次数

什么是TForm.TipMode属性?

这是什么TForm.TipMode属性?

它已在Delphi XE3中添加,但文档中没有提及此属性.

delphi delphi-xe6

8
推荐指数
1
解决办法
1375
查看次数

如何在Delphi 2010中禁用Formatter

Delphi 2010中的格式化程序对我来说真的很烦人.我更喜欢手动格式化我的代码.我相信我做得更好.

我该如何禁用它?

注意:不接受我不首先使用它的原因的答案.我需要它关闭.没有更多,没有更少.

delphi delphi-2010

7
推荐指数
2
解决办法
4797
查看次数

Datasnap是否适用于多达8个非通信密集型双向多人游戏?

我正在构建一个需要以下内容的小型多层面板:

  • 它必须用Delphi编写
  • 必须支持Internet连接(不仅是LAN)
  • 通过HTTP工作
  • 支持一些加密的数据包(可能是自定义的)
  • 能够将命令发送到服务器
  • 能够从服务器接收响应
  • 最多可以将8个播放器连接到一台服务器
  • 能够将复杂对象(可能是JSON序列化)传递给服务器

您是否认为新的Delphi 2010 Datasnap可以在这种情况下成功使用,还是应该使用普通的旧TSocket?

delphi multiplayer datasnap delphi-2010

7
推荐指数
1
解决办法
732
查看次数

如何在Mac OS上获得最高记忆?

在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相当于这样做?

memory delphi macos delphi-xe2

6
推荐指数
1
解决办法
1188
查看次数

有没有办法为整个项目全局设置{$ SCOPEDENUMS ON}?

我想强制执行

{$SCOPEDENUMS ON}
Run Code Online (Sandbox Code Playgroud)

在项目中的所有单位.

目前我在单位声明后立即将其添加到每个单位:

unit unt_WotcSearch;
{$SCOPEDENUMS ON}
...
Run Code Online (Sandbox Code Playgroud)

有没有办法可以全局设置(例如在*.dpr文件或项目设置中),所以不需要将{$ SCOPEDENUMS ON}添加到数百个单位?

delphi enums compiler-errors delphi-xe6

6
推荐指数
1
解决办法
433
查看次数

PathDelim VS DirectorySeparatorChar

一个人可以使用

  • System.IOUtils.TPath.DirectorySeparatorChar

http://docwiki.embarcadero.com/Libraries/Seattle/en/System.IOUtils.TPath.DirectorySeparatorChar

要么

  • System.SysUtils.PathDelim

是否有任何特殊的差异,使用System.IOUtils.Tath中的另一个部分的好处是更面向对象的接口?

http://docwiki.embarcadero.com/Libraries/Seattle/en/System.SysUtils

delphi io delphi-10.1-berlin

6
推荐指数
1
解决办法
1306
查看次数

新的Delphi XE2自动生成的内部版本号是否链接到1.1.2000 00:00:00?

在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实现的详细信息,请参阅此链接:艰难地确定构建日期

如果可以依靠这种方式保持这种方式,那么现在我们有更好的方法来确定编译时间而不是

  1. 使用IDE插件

  2. 使用PE Headers hacks

问题不在于如何返回旧的自动增量版本号功能.

问题 XE2是否确实使用了上面显示的日期和时间,从2010年1月1日开始,在Build和Release数字中添加了几天和几秒?

delphi parsing auto-versioning compilation-time delphi-xe2

5
推荐指数
1
解决办法
2366
查看次数