首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用C++ DLL -错误48 (文件未找到)

调用C++ DLL -错误48 (文件未找到)
EN

Stack Overflow用户
提问于 2016-09-21 07:31:53
回答 4查看 5.1K关注 0票数 3

我有一个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)。

EN

回答 4

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2016-09-21 08:03:51

使用SysInternals进程监视器实用程序监视DLL访问并查找错误。在这个other answer中就是一个例子。查看Excel和CreateFile操作。

票数 0
EN

Stack Overflow用户

发布于 2016-09-21 14:36:05

啊-哈,我发现问题了。结果是它需要两个DLL文件- msvcr120.dll和msvc120.dll。这两个文件在我的System32文件夹中,但不在我的SysWOW64文件夹中。一旦我填充了那个文件夹,DLL就开始工作了。

我在google上发现了许多线程的“相同”问题,但没有答案,所以如果遇到同样的问题,我建议使用依赖遍历器,并确保DLL在两个系统文件夹中都是安全的(尽管我怀疑System32只需要64位DLL,而SysWOW64只需要32位DLL)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39610157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档