无法加载 DLL“xxx.dll”: 找不到指定的模块。

我用C#写了一个程序,隐式调用了三个dll,暂且叫A.dll/B.dll/C.dll吧。这三个dll都是自己写的,使用的C++。其中B.dll中也调用了C.dll。现在的问题是在C#生成的exe中使用A.dll和C.dll都可以,但使用B.dll时却出现了下图的报错。
图片说明
1. 网上有说是路径问题,我是把C#和三个dll的项目放在一个解决方案里的,生成路径都设置到了解决方案目录里的Debug目录,所以在引用时都直接写的dll名称,路径应该没问题,因为A.dll和C.dll都可以调用。
2. 网上也有说是我调用的dll引用了其他的dll,我用depends这个工具打开exe看了一下,如下图。首先,他没有依赖我自己写的这三个dll,这个很奇怪,然后提示我没有那8个红色的dll。我把这8个dll从网上下载了都放进exe所在的Debug文件夹下,再运行exe还是不行啊。
图片说明
我看了很多网上这方面的资料,现在还是解决不了,请教大家这究竟应该怎么解决?

找到原因了,不是常见的路径和依赖的问题,我仔细的看了一下我的B.dll的程序,发现我定义了一个结构体的指针,还没有给这个指针分配内存的时候就用这个指针来引用结构体内的成员了。奇怪的是编译器竟然没报错,而运行中出错竟然提示的是找不到dll。吸取教训,看来dll本身出错了,也会提示这个找不到dll。也多谢各位前辈的指导,csdn真是个不错的地方。

“隐式调用”是什么意思?你必须引用这些dll才行,如果是反射的话,需要Assembly.LoadFromFile加载

确保你的主程序和dll都是同一平台,比如都是x86,不要有的是x86有的是x64。
然后确保你以管理员方式运行程序。将dll复制到system32(如果是x64,并且是32bit,放在syswow64)

既然有dll可以,b不行,那么就看看几个dll工程配置,依赖,路径等是否有区别。
可能B的依赖项有问题。

也可以试试先不让 B 依赖于 C,对 B 进行调用看看是否是这方面的问题。