无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案

时间:2024-04-12 07:50:11

 

=======================================================

        无法定位程序输入点 StrCpyNW 于动态链接库 ****.dll 上。

=======================================================

 

 

        经常情况下,用一些旧版本编译器开发的程序在新的操作系统上不能正常运行。

例如,用 VC6.0 开发的在 XP 上可以正常运行的程序,现在在 Win7/ Win10 执行不了,经常出现类似下列错误:

 

无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案

 

     鉴于笔者已经遇到过至少三次此类情况了, 特简要撰写此文。

     究其原因,是因为 Win XP, Win7, Win10 下各个操作系统的 shell32.dll 模块导出接口差异很大

     如果依赖于该 DLL,则一些早期开发的程序在新版本操作系统上将出现此类错误。反之同理。

 

     如果手头有源码,当然可以选择重新编译整个程序来解决。

     否则,可以尝试下列解决方案:

 

    (1)首先找到依赖于 shell32.dll 的模块,建议下载 ExStudPE Visual Tools 分析查看,下载地址:

           https://github.com/tankaishuai/ExStudPE_Visual_Tools

          用该工具打开目标模块,例如 笔者的问题模块 ExtractText2.dll :

         无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案

可见其依赖了一个 StrCpyNW 接口,在 XP 下没问题,但在 Win10 上,该接口不存在,故而无法运行。

(PS:有人可能会想直接把XP的 shell32.dll 挪过来用,遗憾的是这样是无法加载成功的。)

 

 

(2)选择【Shell32.dll】下【Name】项,右键,【跳转至选取RVA】:

 

无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案

 

 

(3)菜单【选择】->【修改文件数据】:

无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案

 

 

(4)修改如下:

 

无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案

 

无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案

 

将 32 换成 41,点击【确定】。(即是将 shell32.dll 换成 shell3a.dll )

 

 

(5)菜单【文件】->【保存全部数据】,将修改的模块存盘保存,并替换为原来的文件。

 

 

(6)下载 win32exts.dll ,github 下载地址:

        https://github.com/tankaishuai/win32exts_for_Lua

      【注】win32exts.dll 实现了 Win XP ~ Win10 下各个操作系统的 shell32.dll 的全部接口。

 

    并将 win32exts.dll 重命名为 shell3a.dll 放于目标程序同级目录下即可。

    修改完成。尝试运行下,大功告成!!!无法定位程序输入点 StrCpyNW 于动态链接库 - shell32.dll 解决方案