loadPackage太慢的解决办法


追蹤Loadpackage的源碼,可以把它分為兩部分:

   Handle := SafeLoadLibrary(bplname); //這里調用winAPIloadLibrary函數來加載bpl(因此其實bpl也可以認為是一個dll

   InitializePackage(Handle); //初始化這個bpl

進一步分解InitializePackage(Handle),發現它其實包括兩個部分

  CheckForDuplicateUnits(Module); //這個部分我通過參考其他書籍和看它的代碼知道,這里是用來檢測是否多個不同的bpl是否有包含相同的unit.如果是,則raise一個exception

  @PackageLoad := GetProcAddress(Module, 'Initialize'); //這個部分是取得包的入口點函數的地址,然后調用這個入口點函數

  if Assigned(PackageLoad) then

    PackageLoad

  else

    raise EPackageError.CreateFmt(sInvalidPackageFile, [GetModuleName(Module)]);

現在改為如下:

    hPackage := SafeLoadLibrary(ASvcFileName);

    if hPackage = 0 then

      raise EPackageError.CreateResFmt(@sErrorLoadingPackage,

        [Name,SysErrorMessage(GetLastError)]);

    try

      //CheckForDuplicateUnits(hPackage); //這一行注釋掉

      @PackageLoad := GetProcAddress(hPackage, 'Initialize'); //Do not localize

      if Assigned(PackageLoad) then

        PackageLoad

      else

        raise EPackageError.CreateFmt(sInvalidPackageFile, [GetModuleName(hPackage)]);

    except

      FreeLibrary(hPackage);

    end;


Delphi7作为一款经典的开发工具,在64位操作系统中可能会遇到兼容性问题,尤其是当提示无法加载包(Can't load package)时。为了帮助你解决这一问题,我推荐参考《Delphi7在64位系统下无法安装组件(Can't load package)解决方法》这篇资料,它将为你提供在64位Windows环境下安装Delphi7及其组件的解决方案。 参考资源链接:[Delphi7在64位系统下无法安装组件(Can't load package) 解决方法](https://wenku.youkuaiyun.com/doc/6412b4e9be7fbd1778d41442) 当你遇到Can't load package错误时,通常是因为组件或库与操作系统的位数不匹配,或者因为系统环境变量设置不正确。以下是一些解决步骤: 1. 确认你的Delphi7安装包是否支持64位系统。如果不支持,你需要下载支持64位的安装包或者使用兼容模式安装。 2. 检查系统的环境变量设置,确保Delphi的安装路径包含在PATH变量中。 3. 如果你是通过虚拟机或兼容层软件安装Delphi7,检查兼容层的配置,确保其支持32位应用程序的运行。 4. 对于组件安装,尝试以管理员权限运行Delphi IDE,以避免权限不足导致的问题。 5. 检查是否有更新的补丁或服务包可以安装,以便解决已知的兼容性问题。 在进行上述操作时,务必谨慎,错误的设置可能会导致系统不稳定。如果你在解决Can't load package错误后,希望更深入地学习Delphi7的其他高级功能,建议继续查阅《Delphi7在64位系统下无法安装组件(Can't load package)解决方法》一文,它不仅帮助你解决当前问题,还提供了更多深入探讨Delphi7使用的技巧和知识。 参考资源链接:[Delphi7在64位系统下无法安装组件(Can't load package) 解决方法](https://wenku.youkuaiyun.com/doc/6412b4e9be7fbd1778d41442)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值