我用一个my.dll,自动联接av.dll,我用LoadLibrary("my.dll"),GetLastError返回
”指定的模块找不到“,再用LoadLibraryEx("my.dll",NULL,DONT_RESOLVE_DLL_REFERENCES)就ok.(附:1. DONT_RESOLVE_DLL_REFERENCES,DONT_RESOLVE_DLL_REFERENCES标志用于告诉系统将DLL映射到调用进程的地址空间中。通常情况下,当DLL被映射到进程的地址空间中时,系统要调用 D L L中的一个特殊函数,即 DllMain。该函数用于对DLL进行初始化。 DONT_RESOLVE_DLL_REFERENCE S标志使系统不必调用Dll Main函数就能映射文件映像。
D L L能够输入另一个D L L中包含的函数。当系统将一个 D L L映射到进程的地址空间
中时,它也要查看该DLL是否需要其他的DLL,并且自动加载这些DLL。当DONT_RESOLVE _DLL_REFERENCES标志被设定时,系统并不自动将其他的DLL加载到进程的地址空间中。)DLL难道是av.dll找不到,但av.dll是我在编译my.dll时加av.lib自动联上的,请问有什么直接的办法来检测自动联接的av.dll是否在LoadLibrary("my.dll")时是错误之根源??

解决方案 »

  1.   

    是不是my.dll的DllMain函数返回FALSE?
    如果是扩展Dll,看看C*App::InitInstance()是不是正确返回了
      

  2.   

    正是因为my.dll的DllMain返回FALSE,LoadLibrary才返回NULL,
    当用LoadLibraryEx("my.dll",NULL,DONT_RESOLVE_DLL_REFERENCES)时,ok!
    但也不能证明my.dll本身就没有Error,因为LoadLibraryEx时,没有调用my.dll
    的DllMain,也没有映射其它的dll,包括av.dll在内.但即便是my.dll的DllMain
    初始化不成功,也不应该是“指定的模块找不到“。何况DllMain内只是作初始化,没有理由fail.只是我不知怎样跳过my.dll,直接加载av.dll,以证明是av.dll的不可加载。
      

  3.   

    应该是av.dll没有找到,编译时能连接av.lib并不代表编译时一定有av.dll。
    av.dll是运行时才需要的编译时不需要
      

  4.   

    你看看av.dll的DllMain有没有返回true啊。