(5, ‘EndUpdateResourceW’, ‘拒绝访问。’)

EndUpdateResource()更新资源时,GetLastError()返回5,表明资源被锁定,更新失败。

show source 以前同样使用过资源动态更新,但并没有发生过这种现象。旧方案中资源被使用时,对应的动态库是动态加载的;现有方案中,资源所在的库是在程序启动后由exe主动加载了,因此这个动态库现在是使用中状态,即被锁定了。这种情形下资源是只读的,所以EndUpdateResource() Error 5。

今天又碰到返回5这个错误,这次详细的记录一下什么时候资源会被锁定:

1:当宿主启动后对应的模块(或纯资源模块)被自动加载,这时相当于文件已经打开,资源就会被锁定。 2:编译A模块时依赖于B模块的接口(此时链接了B的lib),当A启动后B将被自动载入,资源被锁定(这里转到情况1)。 3:当使用LoadLibary加载库后,在没有FreeLibrary之前,资源是锁定的。 4:有可能被一些防护软件阻挡。

解决办法:把360关了