Ganesh Astroved
Ganesh Astroved

Reputation: 2451

64 bit dll in 64 bit process Vista fails - Unable to load DLL 'dllname': The specified module could not be found

I have a native C code, I compiled the code in vc++ 2008 and it's compiled with 'x64' as platform in configuration manager. I have a C# application which is also compiled with 'x64' as platform and it calls the dll function. I have used Dllimport to call the function from the dll like below.

using System.Runtime.InteropServices;

namespace test            
{    
public partial class Form1 : Form                                                     
  {
  
      [DllImport("mtest", CharSet = CharSet.Ansi)]
        public extern static void e_path(string path);
        
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("test");
            swe_set_ephe_path("E:\\Gan");
        }
    }
}

at the time of running the application I am getting the error as below:

An unhandled exception of type 'System.DllNotFoundException' occurred in test.exe

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

If I run both the dll and the application it's working fine. But I need the dll functions to be called from my ASP pages so I need both the dll and application as 64 bit.

ADDITIONAL INFORMATION: when I checked the dll for dependency using dependency walker for 64-bit, it shows that the Kernel32.dll and NTDLL.DLL and mydll.dll is x64.

Upvotes: 0

Views: 2603

Answers (2)

usac
usac

Reputation: 157

on x64 platforms the SYSWOW64 directory contains files for 32bit applications. You will find the same differentiation in the registry, where SYSWOW64 contains entries for x32 applications. Greetings

Comment: The registry key containing 32bit entries is Wow6432Node and resides in //HKEY_LOCAL_MACHINE

Upvotes: 3

sharptooth
sharptooth

Reputation: 170539

The problem is that your dll depends on some other dll and that other dll can't be located because it is on some path where the loader doesn't search for it or that dll is not 64-bit.

Upvotes: 0

Related Questions