[ 2006/11/11 06:52 | by turbozv ]
|
两个文件
A) \Windows\HandCalendar.dll
B) \Storage\HandCalendar\HandCalendar.dll
A是系统的今日插件,已经被Load到内存中了。
B是准备升级的文件。
他们两个都有一个对外函数UINT32 GetVersion()
于是,我先LoadLibrary(A); 获取GetVersion函数地址,调用之得到A的版本号
然后LoadLibrary(B), 这个时候怪事情出来了, LoadLibrary(B)返回的地址还是刚才A的那个(我确信hInst已经被FreeLibrary过,并设置为NULL了)。
然后B的GetVersion的结果更让我确信LoadLibrary(B)的结果的确是返回的A的Handle。
Why?
没有时间去研究这个了,我把B改一个文件名就对了。
\Storage\HandCalendar\HCToday.dll
A) \Windows\HandCalendar.dll
B) \Storage\HandCalendar\HandCalendar.dll
A是系统的今日插件,已经被Load到内存中了。
B是准备升级的文件。
他们两个都有一个对外函数UINT32 GetVersion()
于是,我先LoadLibrary(A); 获取GetVersion函数地址,调用之得到A的版本号
然后LoadLibrary(B), 这个时候怪事情出来了, LoadLibrary(B)返回的地址还是刚才A的那个(我确信hInst已经被FreeLibrary过,并设置为NULL了)。
然后B的GetVersion的结果更让我确信LoadLibrary(B)的结果的确是返回的A的Handle。
Why?
没有时间去研究这个了,我把B改一个文件名就对了。
\Storage\HandCalendar\HCToday.dll
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50lrfloadlibrary.asp
A similar limitation exists for modules with the same name but residing in different directories. For example, if LoadLibrary is called on WindowsSample.dll, and then LoadLibrary is called on MyDirSample.dll, WindowsSample.dll will simply be reloaded.