Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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
C# 无法加载DLL(找不到模块HRESULT:0x8007007E) 我有一个DLL库,其中有非托管C++ API代码,我需要在.NET 4应用程序中使用。但我尝试加载dll的每个方法都会出现错误:_C#_C++_Dll_Pinvoke - Fatal编程技术网

C# 无法加载DLL(找不到模块HRESULT:0x8007007E) 我有一个DLL库,其中有非托管C++ API代码,我需要在.NET 4应用程序中使用。但我尝试加载dll的每个方法都会出现错误:

C# 无法加载DLL(找不到模块HRESULT:0x8007007E) 我有一个DLL库,其中有非托管C++ API代码,我需要在.NET 4应用程序中使用。但我尝试加载dll的每个方法都会出现错误:,c#,c++,dll,pinvoke,C#,C++,Dll,Pinvoke,无法加载DLL“MyOwn.DLL”:找不到指定的模块。(来自HRESULT的异常:0x8007007E) 我已经阅读并尝试了在互联网上找到的几种解决方案。什么都不管用 我尝试过使用以下方法: [DllImport("MyOwn.dll", CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs((UnmanagedType.I4))] public static extern Int32 MyPro

无法加载DLL“MyOwn.DLL”:找不到指定的模块。(来自HRESULT的异常:0x8007007E)

我已经阅读并尝试了在互联网上找到的几种解决方案。什么都不管用

我尝试过使用以下方法:

[DllImport("MyOwn.dll",  CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs((UnmanagedType.I4))]
public static extern Int32 MyProIni(string DBname, string DBuser_pass,
    string WorkDirectory, ref StringBuilder ErrorMessage);
当我尝试以下操作时,当我运行这个示例(从下载的代码)时,它运行没有问题(使用的dll在bin/debug文件夹中)

我已将我的dll(以及它所依赖的所有文件)复制到我的bin文件夹中

我也尝试过这种方法,但得到了相同的错误:

[DllImportAttribute(MyOwnLibDllPath, EntryPoint="TMproIni")]
[return: MarshalAs(UnmanagedType.I4)]
public static extern  int MyproIni(string DBname, string DBuser_pass, 
    string WorkDirectory, ref StringBuilder ErrorMessage);

有什么建议吗?

尝试输入dll的完整路径。
如果不起作用,请尝试将dll复制到system32文件夹中。

确保您自己的dll的所有依赖项都存在于dll附近,或者在
system32
中,根据我在Windows上的记忆,dll的搜索顺序为:

  • 当前目录
  • 系统文件夹,
    C:\windows\system32或C:\windows\SysWOW64
    (用于64位框上的32位进程)
  • 路径
    环境变量读取

  • 此外,我还要检查DLL的依赖关系,Visual Studio提供的依赖关系步行器可以在这里帮助您,它也可以免费下载:

    打开fusion日志,请参阅以获取有关如何执行此操作的大量建议。调试混合模式应用程序加载问题可能是一个正确的选择。fusion日志记录可以提供很大帮助。

    您可以使用dumpbin工具查找所需的DLL依赖项:

    dumpbin /DEPENDENTS my.dll
    
    这将告诉您需要加载哪些DLL。特别注意MSVCR*.dll。当没有安装正确的VisualC++重新分发时,我看到您的错误代码。

    可以从微软网站获得VisualStudio 2013的“VisualC++ C++可再分发包”。它安装c:\windows\system32\MSVCR120.dll

    在文件名中,120=12.0=Visual Studio 2013


    请注意,对于DLL的目标平台,您有正确的Visual Studio版本(10.0=VS 10,11=VS 2012,12.0=VS 2013…)和正确的体系结构(x64或x86),并且在调试构建时也需要小心。DLL的调试生成依赖于MSVCR120d.DLL,它是库的调试版本,它与Visual Studio一起安装,但不是通过可再发行的软件包安装的。

    请确保将生成平台目标设置为x86或x64,以便它与您的DLL兼容-该DLL可能是为32位平台编译的。

    如果DLL和.NET项目位于同一解决方案中,并且每次都要编译和运行它们,您可以右键单击.NET项目的属性“生成事件”,然后将类似以下内容添加到生成后事件命令行:

    copy $(SolutionDir)Debug\MyOwn.dll .
    

    它基本上是一个DOS行,您可以根据DLL的构建位置进行调整。

    我认为您的非托管库需要一个清单。
    如何将其添加到二进制文件中。这就是为什么


    总之,您的机箱中可以安装多个可再发行库版本,但其中只有一个版本应满足您的应用程序的要求,并且可能不是默认版本,因此您需要告诉系统您的库需要的版本,这就是清单的原因。

    我在将应用程序部署到测试PC时遇到了相同的问题。问题是开发PC有
    msvcp110d.dll
    msvcr110d.dll
    ,但测试PC没有


    我在VisualStudioSHILD中添加了VisualStudioC++ 11调试工具(X86)合并模块,并运行了。希望这对其他人有帮助。

    DLL必须位于bin文件夹中。


    在VisualStudio中,我将dll添加到项目中,而不是在引用中,而是“添加现有文件”。然后将dll的“复制到输出目录”属性设置为“更新时复制”。

    安装程序:32位Windows 7

    上下文:安装了PCI-GPIB驱动程序,由于上述问题,我无法通过该驱动程序进行通信

    简短回答:重新安装驱动程序

    长答案: 我还使用了,它识别了几个缺失的依赖模块。立刻,我想这一定是一个拙劣的驱动程序安装。我不想检查和恢复每个丢失的文件

    我在控制面板的“程序和功能”下找不到卸载程序,这是安装不好的另一个迹象。我不得不手动删除\system32中的两个*.dll和注册表项,以便重新安装驱动程序

    问题已解决


    意外的是,并非所有依赖项模块都已解析。不过,现在可以引用感兴趣的*.dll了。

    有一件非常有趣的事情(并且与技术相关),它可能会浪费您的时间,所以请考虑在这里共享它-

    我创建了一个控制台应用程序项目
    ConsoleApplication1
    和一个类库项目
    ClassLibrary1

    生成p/invoke的所有代码都出现在
    ClassLibrary1.dll
    中。因此,在VisualStudio调试应用程序之前,我只需将C++非托管程序集(<代码> MyunMadieDeals.DLL )复制到 \bin \\Debug \/Cuth>目录下的项目,以便在运行时由CLR加载。p> 我不断地得到那份工作

    无法加载DLL

    错误持续数小时。后来我意识到,所有要加载的非托管程序集都需要复制到启动项目
    控制台应用程序1
    \bin\debug
    目录中,该目录通常是win表单、控制台或web应用程序

    因此,请注意,公认答案中的
    Current Directory
    实际上是指您从中访问的主可执行文件的
    Current Directory
    [DllImport(@"C:\\mycompany\\MyDLL.dll")]