600分悬赏高难度有关问题。需要*选手解答,低手免進

600分悬赏高难度问题。需要*选手解答,低手免進。
情况是这样的,我做了一个个头比较大的bpl,该bpl没有require任何其他bpl,也就是说,rtl等东西都编译在里面了。我在另一程序中通过LoadLibrary调用该bpl,在其中的一个函数中,我对bpl進行初始化,写InitializePackage(hInstance)。结果,发现了一个奇怪的现象,那就是,如果bpl包含了某些第三方组件的Unit,则调用该函数的时候,会报AV错误。经过我的追踪,发现问题出现在InitializePackage函数中,進一步追踪,在InitializePackage(SysUtils.pas)中:

procedure   InitializePackage(Module:   HMODULE);
type
    TPackageLoad   =   procedure;
var
    PackageLoad:   TPackageLoad;
begin
    CheckForDuplicateUnits(Module);
    @PackageLoad   :=   GetProcAddress(Module,   'Initialize ');   //Do   not   localize
    if   Assigned(PackageLoad)   then
        PackageLoad
    else
        raise   EPackageError.CreateFmt(sInvalidPackageFile,   [GetModuleName(Module)]);
end;

发现异常出在PackageLoad一句上,也就是调用当前bpl的名叫‘Initialize’的导出函数中。那么,在Delphi编译的bpl的动态库入口函数中,似乎为每个unit作了一定的初始化调用,似乎每个unit在编译后都生成了一个隐含的函数体,负责对该unit進行一定的初始化工作,而每个Unit对应的这个隐含的函数都汇总到dll入口函数Initialize函数中被统一调用。那么奇怪的问题来了:我诧异的发现,出现问题的Unit并没有initialization部分,那么,是在干什么的时候导致的AV呢?除了initialization以外,还有哪些情况会导致在Unit的隐含初始化函数中产生内容呢?const值的初始化会不会在动态库加载的时候進行?

请高手能给予解答,如果解决,则再给500分。

------解决方案--------------------
先BS一下LZ的标题.

既然你会写bpl应该知道, 你的主程序在没有选中 Build with runtime package的时候与
bpl是用的两套VCL. 另外你的主程序与bpl中的第三方控件版本要一致, BPL只能用于同一版的
IDE调用.
------解决方案--------------------
我感觉既然写成bpl, 就不要用LoadLibrary来调用,虽然bpl从本质上还是dll,否则borland也不会专门提供 LoadPackage这个函数了。

可能你是想自己用LoadLibrary来模拟LoadPackage,不过我觉得意义不大。
------解决方案--------------------
如果你要看需要那些bpl/dll支持,可在一台没有装过delphi/bcb的xp/win2000的机器上运行你的项目,操作系统会告诉你需要的所有dll/bpl
------解决方案--------------------
BLP 里面代码有问题嘛。

AV 就是读地址错误嘛,

原因:对象还没创建或者释放了 还去访问对象。

解决方法:要源码,改三方控件。