delphi - 如何在不启用使用运行时包构建的情况下使用 Delphi Dlls

标签 delphi memory-management runtime frames bpl

最近我开始了一个有很多表单、框架和额外控件的项目,所以我的应用程序膨胀了,我在我的项目中使用了 3 个 exe(全部在 Delphi 2009 中制作),这些应用程序也共享相同的框架和表单。所以我用 dll 来分享这些表格。

但是一个问题来了,说不同的 Tfont 错误。所以我在网上提出了答案,并给出了选择 |使用运行时包构建。 然后一切都开始完美运行

但是当我检查 Windows 任务管理器 | memusage 它是〜21 500 kb(21.5 mb)。(但没有使用运行时包构建的内存使用量仅为2000 kb,还包括通过将其添加到所有3个exe项目中手动包含帧)并且我的编译器在启用Build with时也运行缓慢运行时包

现在我必须使用 分发项目3 个 exe + delphi bpl 运行时包 + dll

但我想知道 memusage 是如何增加的,我只想分发 3 个 exe + dll (只是正常的 delphi exe 是如何分布的)我什至使用过内存管理器但没有工作

如何克服这个问题

这是我使用的代码

在exe中

procedure TForm1.Button1Click(Sender: TObject);
type
TGetTheFrame =Function( Owner: TComponent; TheParent: TWinControl ): TFrame; stdcall ;
 var
  GetTheFrame : TGetTheFrame;
begin
try
   GetTheFrame(application,TabSheet1).Free ;
except
end;
frm := GetTheFrame(application,TabSheet1) ;
dllHandle := LoadLibrary('project1.dll') ;
   if dllHandle <> 0 then
   begin
     GetTheFrame := GetProcAddress(dllHandle, 'GetTheFrame') ;
  frm := GetTheFrame(application,TabSheet1)   //call the function
    {   ShowMessage('error function not found') ;
     FreeLibrary(dllHandle) ; }
   end
   else
   begin
     ShowMessage('xxxx.dll not found / not loaded') ;
   end

在 dll 中
uses
  Windows,
  Messages,
  SysUtils,
  Classes,
  Forms,StdCtrls, Controls,

  Unit2 in 'Unit2.pas' {Frame2: TFrame};

{$R *.res}

Function  GetTheFrame( Owner: TComponent; TheParent: TWinControl ): TFrame; stdcall;
Begin
 Result := TFrame2.Create( Owner );

 Result.Parent := TheParent;
End;


exports gettheframe;

begin
end.

最后如何在不使用运行时包构建的情况下完成所有这些操作

不仅仅是内存问题,只是告诉我如何在没有 buildwithruntime 包的情况下创建这样的应用程序

最佳答案

1)我认为它很自然,特别是如果有很多对象/图像等。如果你将一些图像/表单等作为资源移动到 dll 怎么样。然后在需要时调用它,如果没有则释放。

2)尝试也检查内存泄漏。我以前有同样的问题,当我的程序启动时,内存使用量越来越大。尝试使用 FastMM4。

3)排除一些没有被使用的bpls。因为即使您不使用它,它也会创建运行时。例如“InterBaseDriver;DBXMySQLDriver;dbexpress;dbxcds;VirtualTreesD12 等。”我没有使用它,所以我不打算排除它。尝试了解您使用的所有单位,它们属于什么 bpl。

关于delphi - 如何在不启用使用运行时包构建的情况下使用 Delphi Dlls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3985256/

相关文章:

delphi - BDS2006 中的 GetVersionExW 错误

delphi - 为什么 Alt 键没有触发我的低级键盘 Hook ?

delphi - 如何在不使用引发异常的情况下使用 JCL 记录调用堆栈

c - malloc 防止垃圾被打印?

iphone - 当稍后需要引用传递给类中函数的 NSString 时,正确的方法是什么? (iPhone 开发者)

matlab - MATLAB 中的高效数组预分配

JAVA冒泡排序运行时问题

multithreading - Delphi异常处理,使用E : Exception or ExceptObject

algorithm - 分而治之算法在 O(logn) 中找到假币

delphi - TListView : Subitem order after adding a new column between existing during runtime