Unable to load DLL (Module could not be found HRESULT: 0x8007007E)

I have dll library with unmanaged C++ API code I need to use in my .NET 4.0 application. But every method i try to load my dll i get an error:

Unable to load DLL 'MyOwn.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

I have read and tried severa solutions i have found on the internet. Nothing works..

I have tried using following methods:

[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);

When I tried following this article and when I run this example (from the downloaded code) it runs without a problem (the dll used is in the bin/debug folder)

I have copied my dll (along with all files the it depends on into my bin folder).

I also tried this approach but got the same error:

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

Any suggestions?


From what I remember on Windows the search order for a dll is:

  • Current Directory
  • System folder, C:windowssystem32 or c:windowsSysWOW64 (for 32-bit process on 64-bit box).
  • Reading from the Path environment variable
  • In addition I'd check the dependencies of the DLL, the dependency walker provided with Visual Studio can help you out here, it can also be downloaded for free: http://www.dependencywalker.com


    You can use the dumpbin tool to find out the required DLL dependencies:

    dumpbin /DEPENDENTS my.dll
    

    This will tell you which DLLs your DLL needs to load. Particularly look out for MSVCR*.dll. I have seen your error code occur when the correct Visual C++ Redistributable is not installed.

    You can get the "Visual C++ Redistributable Packages for Visual Studio 2013" from the Microsoft website. It installs c:windowssystem32MSVCR120.dll

    In the file name, 120 = 12.0 = Visual Studio 2013.

    Be careful that you have the right Visual Studio version (10.0 = VS 10, 11 = VS 2012, 12.0 = VS 2013...) right architecture (x64 or x86) for your DLL's target platform, and also you need to be careful around debug builds. The debug build of a DLL depends on MSVCR120d.dll which is a debug version of the library, which is installed with Visual Studio but not by the Redistributable Package.


    Try to enter the full-path of the dll. If it doesn't work, try to copy the dll into the system32 folder.

    链接地址: http://www.djcxy.com/p/44456.html

    上一篇: 使用DllImport将非托管dll加载到托管应用程序中

    下一篇: 无法加载DLL(无法找到模块HRESULT:0x8007007E)