查找c#中引用的非托管c++ dll的依赖项

本文关键字:c++ dll 依赖 引用 查找 | 更新日期: 2023-09-27 18:19:01

我有一个c# winforms应用程序,它使用我用c++编写的dll作为非托管代码。在4台测试计算机上,该程序正常运行。在8台测试计算机上,我在运行程序时得到一个错误。

无法加载DLL "myUnmanaged.dll"找不到指定的模块。

所讨论的dll位于与c# exe相同的目录中。Visual studio设置为在"编译"c# exe时将文件复制到指定位置。

由于程序可以在某些计算机上工作,但不能在其他计算机上工作,我猜测应用程序工作的计算机上已经有一些我的程序工作所需的dll。

我将注意到,我的非托管dll包括从一个名为SetupApi.dll的windows工具包调用另一个dll。让Visual Studio正确地引用这个dll需要指向VS直接到它的lib文件,以获得我的dll编译。所有能正确运行我的程序的计算机都有位于windows'system32目录下的setupapi.dll。一些不能正确运行我的程序的计算机也有位于windows'system32目录中的setupapi.dll。为了测试,我把setupapi.dll放在与c# exe相同的目录中,并在不工作的计算机上重新测试,结果是相同的。

我如何找出什么文件(s)/依赖关系,我错过了阻止我的应用程序在一些计算机上工作?

我使用VS express 2013编写软件。它缺少专业版的一些功能。一种解决方案是生成一个MSI文件,它将包含依赖项。但这是一个专业功能,我没有权限使用。

对于此事的任何帮助,我将不胜感激。

32位/64位信息:
c#应用程序和非托管c++ dll都是在32位(x86)中构建的。该程序运行的测试计算机中有3台是64位的win操作系统(vista 64位,win7 64位,win8.1 64位),该程序运行的测试计算机之一是win7 32位。我的应用程序不能运行的计算机包括32位和64位计算机。正因为如此,我很确定我的问题与操作系统的位无关。

查找c#中引用的非托管c++ dll的依赖项

请使用。net反射器或依赖漫步器,确保你正在使用x86或x64版本根据您的需要- Gilad

这个对原始问题的评论最终包含了解决方案。按照建议,我使用了依赖项查找器来查找丢失的dll。