Pre*_*ias 4 delphi delphi-2006 custom-component
我正在开发AA成分delphi 7和delphi 2006,组件使用.pas (不矿)文件这需要一个DLL文件是存在于应用程序目录.
可以将DLL文件嵌入到组件中,这样当用户将其放在表单上或在运行时创建它时,DLL它将被放在应用程序目录中吗?
目前
1)我告诉用户将DLL文件放在应用程序目录中.
2)DLL在参考资料中添加文件,这样在创建时,我可以将其DLL放入应用程序目录中?来自delphidabbler_embed_resource.我已经完成了使用
{Drop the Resource..!!!}
procedure DropDllToApplicationDirectOry(applicationPath : string);
var
RS: TResourceStream;
begin
// Create resource stream
RS := TResourceStream.CreateFromID(HInstance, 100, RT_RCDATA);
try
// applicationPath : example c:\MyTestProject Lee\
if DirectoryExists(applicationPath) then RS.SaveToFile(applicationPath+'myDllFileWhichIsNeeded.dll')
finally
// Free the stream
RS.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这DropDllToApplicationDirectOry 把资源从{$RmyDllFileWhichIsNeeded.dll.RES}和drope带到了位置但是
DropDllToApplicationDirectOry当我将组件放在表单上时,如何调用此方法?
我尝试initialization了组件但DLL没有复制,所以我得到错误

编辑
对RXControls的TRxClock,当我们放弃了时钟此表上运行时,时钟开始运行(显示CURENT时间)...所以我想这
constructor Tmycomponeny.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
{add dll}
DropDllToApplicationDirectOry(ExtractFilePath(Application.ExeName));
end;
Run Code Online (Sandbox Code Playgroud)
但这不起作用..
代码OF RXControls
constructor TRxClock.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if not Registered then begin
ClockInit;
Registered := True;
end;
Caption := TimeToStr(Time);
ControlStyle := ControlStyle - [csSetCaption]
{$IFDEF WIN32} - [csReplicatable] {$ENDIF};
BevelInner := bvLowered;
BevelOuter := bvRaised;
FTimer := TRxTimer.Create(Self);
FTimer.Interval := 450; { every second }
FTimer.OnTimer := TimerExpired;
FDotsColor := clTeal;
FShowSeconds := True;
FLeadingZero := True;
GetTime(FDisplayTime);
if FDisplayTime.Hour >= 12 then Dec(FDisplayTime.Hour, 12);
FAlarmWait := True;
FAlarm := EncodeTime(0, 0, 0, 0);
end;
Run Code Online (Sandbox Code Playgroud)

总的来说,这个想法不会起作用.您假设开发人员将始终将您的组件放到表单上.但他们也可以从版本控制中检查现有项目,然后不会创建DLL.
在我看来,您应该简单地记录依赖项,并让开发人员确保满足依赖性.建议他们将DLL添加到他们的修订控制系统,以便将其签出到应用程序目录中.
在部署时,开发人员需要了解这种依赖性.这必须是开发人员的责任.因此,让开发人员管理这个句号更简洁,更容易.