查找c#中引用的非托管c++ dll的依赖项
Finding dependancies of unmanaged c++ dll referenced in C#
我有一个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编译。所有能正确运行我的程序的计算机都有位于windowssystem32目录下的setupapi.dll。一些不能正确运行我的程序的计算机也有位于windowssystem32目录中的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位计算机。正因为如此,我很确定我的问题与操作系统的位无关。
请使用。net反射器或依赖漫步器,确保你正在使用x86或x64版本根据您的需要- Gilad
这个对原始问题的评论最终包含了解决方案。按照建议,我使用了依赖项查找器来查找丢失的dll。
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL