[晴 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

程序 | 评论(2) | 引用(0) | 阅读(13252)
Yonsm Homepage
2006/11/23 02:36
不仅如此,假设其他进程Load了这个 Library,你再LoadLibrary也是刚才那个Module的引用。CE可能基于节省内存的原因考虑吧
turbozv Email Homepage
2006/11/15 00:31
原因很简单:

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.
分页: 1/1 第一页 1 最后页