最近、非常に多くのフォーム、フレーム、および追加のコントロールを使用してプロジェクトを開始したため、アプリケーションが膨張し、プロジェクトで3つのexe(すべてDelphi 2009で作成)を使用しています。これらのアプリケーションも同じフレームとフォームを共有しています。だから私はこれらのフォームを共有するためにdllを使用しました。
しかし、別のTfontエラーという問題が発生しました。だから私はオンラインで参照し、選択するという答えを持ってきました| ランタイムパッケージを使用してビルドします 。その後、すべてが完璧に機能し始めました
しかし、私がウィンドウズのタスクマネージャーをチェックしたとき| memusageは約21500kb(21.5 mb)です(ただし、memの使用量はランタイムパッケージを使用したビルドなしでわずか2000 kbであり、3つのexeプロジェクトすべてに追加して手動でフレームを含めることもできます)。ランタイムパッケージ
そして今、私は3つのexe +delphibplランタイムパッケージ+dllでプロジェクトを配布する必要があります
しかし、メモリがどのように増加したかを知りたいので、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パッケージなしでそのようなアプリケーションを作成する方法を教えてください