本文主要是介绍delphi中採用bpl共享模塊的幾點釋疑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. LoadPackage做了哪些事情?
LoadPackage的代碼可以從delphi的源碼(sysutils.pas)中找到
{ LoadPackage }
function LoadPackage(const Name: string): HMODULE;
begin
{$IFDEF MSWINDOWS}
Result := SafeLoadLibrary(Name); //這裡使用windows api LoadLibraryA來以加載一個標準的dll的方式來加載(bpl本身也是一個動態鏈接庫)
{$ENDIF}
if Result = 0 then
begin
raise EPackageError.CreateResFmt(@sErrorLoadingPackage,
[Name,
{$IFDEF MSWINDOWS}SysErrorMessage(GetLastError){$ENDIF}
end;
try
InitializePackage(Result); //這裡使用winton api GetProcessAddress來取得單元的initialization部分的地址,並執行他
except
{$IFDEF MSWINDOWS}
FreeLibrary(Result);
{$ENDIF}
raise;
end;
end;
{ UnloadPackage }
procedure UnloadPackage(Module: HMODULE);
begin
FinalizePackage(Module); //這裡執行單元的finalization部分的代碼
{$IFDEF MSWINDOWS}
FreeLibra
这篇关于delphi中採用bpl共享模塊的幾點釋疑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!