我有一个Excel工作簿,它调用我用C++编写的测试DLL。DLL的路径是用VBA硬编码的。DLL使用的唯一文件是stdlib和iostream。
在我的机器上工作。在其他几台办公机器上,它也能工作。但是,在其余部分,当我试图通过Excel调用DLL时,我会得到错误48 -文件找不到。
我的理解是错误53是文件丢失;错误48是缺少依赖项。我使用过依赖步行器,没有发现任何问题。
然而,我发现,如果我在一台机器上安装Visual,那么在安装Excel文件/DLL之后,就有90%的可能性能够完美地工作。在它不能工作的10%上,我重新启动并重新运行Visual安装,选择“修复”,在安装完成之后,Excel/DLL组合工作。因此,基本上安装Visual允许Excel加载DLL。如果卸载Visual,则DLL仍然工作正常。
很明显,这意味着那些机器上缺少了一些东西,但是我不知道是什么--我试着分别安装所有出现在“程序”下的部件,例如大多数当前的.net框架、visual c++再发行等等.但不起作用。唯一起作用的是安装Visual本身。我不确定如何进行,因为要求用户挂载一个5 5gig并安装一个开发人员环境并不是非常理想的。
啊-哈,我发现问题了。结果是它需要两个DLL文件- msvcr120.dll和msvc120.dll。这两个文件在我的System32文件夹中,但不在我的SysWOW64文件夹中。一旦我填充了那个文件夹,DLL就开始工作了。
我在google上发现了许多线程的“相同”问题,但没有答案,所以如果遇到同样的问题,我建议使用依赖遍历器,并确保DLL在两个系统文件夹中都是安全的(尽管我怀疑System32只需要64位DLL,而SysWOW64只需要32位DLL)。
发布于 2016-09-21 07:39:54
很可能您的DLL依赖于C++再分发。根据用于开发DLL的VC++版本,应在目标计算机上安装相关版本的VC++再分发表。
在VS 2015的情况下,您可以在这里找到VC++再分发文件:https://www.microsoft.com/en-us/download/details.aspx?id=48145
发布于 2016-09-21 08:03:51
使用SysInternals进程监视器实用程序监视DLL访问并查找错误。在这个other answer中就是一个例子。查看Excel和CreateFile操作。
发布于 2016-09-21 14:36:05
啊-哈,我发现问题了。结果是它需要两个DLL文件- msvcr120.dll和msvc120.dll。这两个文件在我的System32文件夹中,但不在我的SysWOW64文件夹中。一旦我填充了那个文件夹,DLL就开始工作了。
我在google上发现了许多线程的“相同”问题,但没有答案,所以如果遇到同样的问题,我建议使用依赖遍历器,并确保DLL在两个系统文件夹中都是安全的(尽管我怀疑System32只需要64位DLL,而SysWOW64只需要32位DLL)。
https://stackoverflow.com/questions/39610157
复制相似问题