Jon
Jon

Reputation: 40062

ASP.Net MVC DllImport BadImageFormatException 32bit/64bit

I have the below code which is throwing a BadImageFormatException. The DLL it's loading is 32bit. The web server is running Windows 64bit but the application pool is set to Enable 32 bit. Is there any way I can get this to work?

public class HomeController : Controller
{
    [DllImport("CDCrypt.dll")]
    [return: MarshalAs(UnmanagedType.LPStr)]
    public static extern String Encrypt 
        ([MarshalAs(UnmanagedType.LPStr)] String aName);

    [DllImport("CDCrypt.dll")]
    [return: MarshalAs(UnmanagedType.LPStr)]
    public static extern String Decrypt
        ([MarshalAs(UnmanagedType.LPStr)] String aName);

    public ActionResult Index()
    {
        try
        {
            ViewBag.EncryptString = Encrypt("test");
        }
        catch (Exception e)
        {
            ViewBag.EncryptString =
                "Stack Trace\r\n:" + "\r\nException: " + e.Message;
            return new HttpStatusCodeResult(500);
        }
        return View();
    }

    public ActionResult Up()
    {
        ViewBag.Up = "You can see me";
        return View();
    }
}

Upvotes: 1

Views: 1637

Answers (1)

Adam Tuliper
Adam Tuliper

Reputation: 30152

Both the library and the consumer have to be the same. So determine what your lib you are calling is and ensure you are compiling for that type. Now - IIS itself (at least v 6) can only run one mode OR the other for everything so it either needs to be set for 64 or 32 bit across the board . See this http://support.microsoft.com/kb/894435

in conjunction with:

http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/35b09f74-1d8e-4676-90e3-c73a439bf632/

Upvotes: 1

Related Questions