Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA调用C++;DLL-错误48(找不到文件) 我有一个Excel工作簿,它调用了我在C++中编写的一个测试DLL。DLL的路径是用VBA硬编码的。DLL使用的唯一文件是stdlib和iostream_C++_Excel_Vba_Dll - Fatal编程技术网

VBA调用C++;DLL-错误48(找不到文件) 我有一个Excel工作簿,它调用了我在C++中编写的一个测试DLL。DLL的路径是用VBA硬编码的。DLL使用的唯一文件是stdlib和iostream

VBA调用C++;DLL-错误48(找不到文件) 我有一个Excel工作簿,它调用了我在C++中编写的一个测试DLL。DLL的路径是用VBA硬编码的。DLL使用的唯一文件是stdlib和iostream,c++,excel,vba,dll,C++,Excel,Vba,Dll,在我的机器上它工作。在其他几台办公机器上,它也能工作。然而,在剩余的部分,当我试图通过Excel调用DLL时,我得到了错误48-找不到文件 我的理解是错误53是文件丢失;错误48是缺少依赖项。我使用了dependency walker,没有发现任何问题 然而,我确实发现,如果我在一台机器上安装VisualStudio,安装后Excel文件/DLL完美工作的可能性为90%。在10%的情况下,它不起作用,我重新启动并重新运行VisualStudio安装,选择“修复”,安装完成后,Excel/DLL组

在我的机器上它工作。在其他几台办公机器上,它也能工作。然而,在剩余的部分,当我试图通过Excel调用DLL时,我得到了错误48-找不到文件

我的理解是错误53是文件丢失;错误48是缺少依赖项。我使用了dependency walker,没有发现任何问题

然而,我确实发现,如果我在一台机器上安装VisualStudio,安装后Excel文件/DLL完美工作的可能性为90%。在10%的情况下,它不起作用,我重新启动并重新运行VisualStudio安装,选择“修复”,安装完成后,Excel/DLL组合再次工作。因此,安装VisualStudio基本上允许Excel加载DLL。如果我卸载VisualStudio,DLL仍然可以正常工作

显然这意味着这些机器上缺少了一些东西,但是我不知道什么-我已经尝试分开安装所有在“程序”下出现的所有部件,如最新的.NETFramework,Visual C++ +可再分发等等。但它不起作用。唯一有效的方法是安装VisualStudio本身。 我不确定该如何进行,因为要求用户安装5gig ISO并安装开发人员环境并不理想


啊哈,我发现了问题。事实证明,它需要2个DLL文件—msvcr120.DLL和msvc120.DLL。我在System32文件夹中有这两个文件,但在SysWOW64文件夹中没有。我一填充那个文件夹,DLL就开始工作了


我在google上发现许多线程都有“相同”的问题,但没有答案,因此如果遇到相同的问题,我建议使用dependency walker并确保DLL位于两个系统文件夹中以确保安全(尽管我怀疑System32仅用于64位DLL,SysWOW64用于32位DLL)

最可能的是你的DLL依赖于C++的可再分布。根据用于开发DLL的VC++版本,应在目标计算机上安装相关版本的VC++可再发行文件

对于VS 2015,您可以在此处找到VC++可再发行版本:

使用SysInternals进程监视实用程序监视DLL访问并查找错误。这就是一个例子。观察Excel进程和CreateFile操作。

啊哈,我发现了问题。事实证明,它需要2个DLL文件—msvcr120.DLL和msvc120.DLL。我在System32文件夹中有这两个文件,但在SysWOW64文件夹中没有。我一填充那个文件夹,DLL就开始工作了


我在google上发现许多线程都有“相同”的问题,但没有答案,因此如果遇到相同的问题,我建议使用dependency walker并确保DLL位于两个系统文件夹中以确保安全(尽管我怀疑System32仅用于64位DLL,SysWOW64用于32位DLL)当dll与调用程序的位不对应时,也可以返回错误48。因此,例如,如果使用64位Excel运行Excel的VBA,则需要确保DLL编译为64位二进制文件

请注意,这与错误53不同,后者实际上意味着在任何路径中都找不到DLL