谨慎解决:找不到指定的模块(Exception from HRESULT:0X8007007E)

问题:找不到指定的模块(Exception from HRESULT:0X8007007E)

问题描述:

这个问题想必大家都碰到过,但始终很难找到解决问题的答案。其实这个问题的描述本来就有些模糊,说是缺少模块了,也就是DLL,但又不具体说明白是哪些DLL,实在让人摸不着脑袋。关于C#调用C\C++编写的DLL,我也为此花费了较多的时间去解决。

其实这个问题虽然报错是一样的,但是具体的问题是不一样,通常会有以下情况会报出这样的错误:

1.C#调用DLL时,你调用了DLL里已经被删除的函数,这个函数可能是你之前写上的,但是你后来已经删除了它。

2.C#调用的DLL,然而这个DLL又调用了其他的DLL,其他DLL与这个DLL没有联系上,尤其出现调用多种DLL就容易出现这个问题。

3.本来C#调用这个DLL是32位的,但是你编译项目时用的是64位的。所以你用64位编译的项目去调用64位DLL,但代码里只设置了调用32位的DLL,这导致调用的路径不对。(抛出异常只会说你找不到指定的模块)

4.也可能是编译时必要的系统DLL,因为有些你自己编写出来的DLL,必须依赖某些系统DLL才能链接起来,因此是系统本身缺少了这些模块。

        以上常见的情况,说实话第4种出现的情况其实是很少的,除非是你以前安装过或者设置的系统环境不正确而导致的。我也百度过有网友说利用depends.exe这个软件能够找到问题所在。当然,我们可以借助这个软件查看一下是不是真的缺少系统DLL的问题。但有时候你就算查到了好像真的缺少了某些系统DLL,于是你在网上下载下来把它们都放在系统指定的问题,结果还是没能解决这个问题。这时候就不要想缺少系统DLL的问题了,说明问题出现在我以上分析的前三种情况。

       还有人说调用DLL失败,其实是没有注册DLL的问题。说句实话,如果是你自己编写的DLL,那就不要尝试着去打开命令提示符进行注册这个DLL了,因为没用,照样失败。

      找不到指定的模块,顾名思义就是找不到你编写过的DLL模块,别第一时间就想到的是缺少系统DLL的问题(除非这个DLL并不是你编写的,比如你调用的是某些库的DLL),否则会很浪费时间。

     写这篇文章的目的,并不是帮助你解决这个问题,而是提供给你解决问题的思路。

 

你可能感兴趣的:(计算机硬软件与系统问题)