小编jpf*_*ius的帖子

Delphi字符串共享问题

我有大量的对象都存储了文件名.所有文件名都在给定的基目录中(让我们称之为C:\BaseDir\).我现在正在考虑两种选择:

  1. 存储对象中的绝对路径
  2. 在对象中存储相对路径并另外存储基本路径

如果我正确理解Delphi字符串,第二种方法将需要更少的内存,因为基本路径字符串是共享的 - 假设我将相同的字符串字段传递给所有对象,如下所示:

TDataObject.Create (FBasePath, RelFileName);
Run Code Online (Sandbox Code Playgroud)

这个假设是真的吗?内存中只有一个基本路径的字符串实例吗?

如果有人知道处理这种情况的更好方法,也可以随意评论.

谢谢!

delphi string memory-management delphi-xe

4
推荐指数
1
解决办法
173
查看次数

在Delphi XE2上使用MSBuild编译运行时包时编译错误

我正在将构建服务器(Jenkins)升级到Delphi XE2.编译运行时包时会发生以下错误:

ComponentsR.vrc(61): error RC2135: file not found: ComponentsR_Icon4.ico
Run Code Online (Sandbox Code Playgroud)

此运行时包中没有图标或资源,因此我不知道如何处理此消息.什么是"vrc"文件btw?

谢谢你的帮助.

delphi continuous-integration delphi-xe2

4
推荐指数
1
解决办法
329
查看次数

将位图存储在文本文件中

我想在文本文件中存储小位图,类似于Delphi使用它的dfm文件的方式.

我可以使用RTL或VCL中的函数来执行此操作吗?

delphi delphi-xe2

4
推荐指数
1
解决办法
458
查看次数

从剪切区域中排除圆角矩形?

使用Delphi/GDI从剪切区域中排除圆角矩形的正确方法是什么?

ExcludeClipRect排除的矩形区域,并有CreateRoundRectRgn连同SelectClipRgn到剪辑区域设置为圆角矩形.

但是如何从裁剪区域中排除圆形矩形(类似于ExcludeClipRoundRect或ExcludeClipRgn)?我使用CombineRgn进行了实验,但没有让它正常工作.

windows delphi gdi

4
推荐指数
1
解决办法
613
查看次数

Sveltekit 和 SSR

在 sveltekit 的上下文中,我需要一些帮助来理解 SSR。我注意到该load方法在服务器和客户端上都被调用,我无法解决这个问题。我想它需要初始化客户端组件的状态,但为什么不将 SSR 产生的 props 传递给客户端呢?

如果在 SSR 期间需要做数据库请求怎么办?现在从客户端重复相同的数据库请求?如果这甚至不可能怎么办?我知道我可以使用browserfrom$app/env在服务器和浏览器上运行不同的代码,但我返回什么道具?有没有办法将数据从服务器端调用load传递到客户端调用?

server-side-rendering svelte sveltekit

4
推荐指数
1
解决办法
535
查看次数

销毁 TReader 时的异常

下面的代码抛出一个 EZDecompressionError 和消息“无效的 ZStream 操作”

Reader.Free
Run Code Online (Sandbox Code Playgroud)

被执行。有人能告诉我这段代码有什么问题吗?

Reader := nil;
Decompressor := nil;
InputFile := TFileStream (FileName, fmOpenRead);
try
  Decompressor := TDecompressionStream.Create (InputFile);
  Reader := TReader.Create (Decompressor, 1024);
  SomeString := Reader.ReadString;
finally
  Reader.Free
  Decompressor.Free;
  InputFile.Free;
end;
Run Code Online (Sandbox Code Playgroud)

我测试了更改内存释放命令的顺序,但这似乎没有帮助。省略 Reader.Free 行当然会导致内存泄漏。

delphi file-io memory-management

3
推荐指数
1
解决办法
303
查看次数

记录和同步

我刚刚编写了自己的日志框架(非常轻量级,不需要大型日志框架).它由一个接口ILogger和许多实现该接口的类组成.我有一个问题是TGUILogger,它将TStrings作为日志记录目标,并将日志记录与主线程同步,以便列表框的Items成员可以用作目标.

type
  ILogger = Interface (IInterface)
    procedure Log (const LogString : String; LogLevel : TLogLevel);
    procedure SetLoggingLevel (LogLevel : TLogLevel);
  end;

type    
  TGUILogger = class (TInterfacedObject, ILogger)
  public
    constructor Create (Target : TStrings);
    procedure Log (const LogString : String; LogLevel : TLogLevel);
    procedure SetLoggingLevel (LogLevel : TLogLevel);
  private
    procedure PerformLogging;
  end;

procedure TGUILogger.Log (const LogString : String; LogLevel : TLogLevel);
begin
  TMonitor.Enter (Self);
  try
    FLogString := GetDateTimeString + ' ' + LogString;
    TThread.Synchronize (TThread.CurrentThread, PerformLogging);
  finally
    TMonitor.Exit (Self);
  end;
end; …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading synchronization delphi-2009

3
推荐指数
1
解决办法
947
查看次数

从专门的泛型类型派生

是否可以从专用泛型类型派生类:

TGenericBase <T> = class
  // ...
end;

TSpecializedDerived = class (TGenericBase <String>)
  // ...
end;
Run Code Online (Sandbox Code Playgroud)

只是想知道这是否可能......

当我把它放在一个新项目中时,编辑代码工作正常.必须是由于其他一些错误; 对于那个很抱歉

delphi generics inheritance delphi-2009

3
推荐指数
1
解决办法
748
查看次数

读取任意内存位置?可能?

有没有办法(只读)访问任意内存位置而不会遇到访问冲突?我认为每个进程都有自己的虚拟地址空间,它可以读取所有可用的内存位置......似乎并非如此,因为如果我执行类似的操作,我的程序会挂起

var
  IntPtr : PInteger;
  AnInteger : Integer;
...
IntPtr := $100;
AnInteger := IntPtr^;
Run Code Online (Sandbox Code Playgroud)

我仍在尝试编写我的低级递归大小函数,并尝试检测数据成员是否是对象引用.

谢谢!

memory delphi pointers access-violation

3
推荐指数
1
解决办法
1706
查看次数

仅在I/O负载较低时运行线程

我有一个后台线程执行I/O操作(使索引保持最新).但除了几个客户端访问服务器的硬盘,我希望尽快访问这些访问.所以我想,如果索引线程仅在I/O负载较低时运行,那就太好了.

有没有办法解决这个问题?

我也愿意接受其他建议.

delphi io performance delphi-2009 backgroundworker

3
推荐指数
2
解决办法
291
查看次数