Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to call the DLL from ASP.NET

Hi I have a C Dll which will interact with a cobol application. we want to send the data to the cobol through internet.

so i created an C# DLL which will call the C DLL. its working fine when i do a consoleapp, but when i try to call the same DLL from ASP.NET its giving error message

i dont understand that error

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

There are some other posts regarding this but those were not matching my context i think im missing permissions for asp.net

this is the declaration in my c# dll for calling c dll

[DllImport(@"C:\CCExpert\haz450cp.dll", EntryPoint = "Methodname", CallingConvention = CallingConvention.Cdecl)]
    unsafe public static extern void Methodname(ref p1, ref p2);

Edit:

Hi i changed the settings according to your suggestions but now im getting a new error

Microsoft Visual Studio C Runtime Library has detected a fatal error in w3wp.exe
like image 807
Raghuveer Avatar asked Jan 18 '23 11:01

Raghuveer


2 Answers

If you have a C .dll, it'll be either 32-bit or 64-bit. You must make sure that your site is running in the correct platform for that (that is, your site is running as a matching 32/64-bit site.)

In IIS 7, you can configure the bitness of the application pool by right-clicking the app pool and selecting Advanced Settings. There's a setting called Enable 32-bit applications, you need to set that to True for 32-bit sites and False for 64-bit sites.

You can use Dependency Walker to see if the DLL is 32-bit or 64-bit: use View full paths (looks like C:\ on the toolbar) and if the dependencies of your .dll and:

  • If you have a 32-bit OS, your .dll may be 64-bit. You won't be able to load it.
  • If you have a 64-bit OS:
    • If the dependencies are under System32, it's a 64-bit .dll
    • If the dependencies are under SysWOW64, it's a 32-bit .dll

That tells you how to set the application pool. To set the app pool you can check this link.

Make sure you use Advanced Settings when you open the app pool properties, not basic settings. Also, these settings are not available when you bring up properties for your site - they are only available for the app pool.

like image 123
xxbbcc Avatar answered Jan 20 '23 01:01

xxbbcc


The most likely cause of this problem is that you are trying to load a 32 bit DLL into a 64 bit process (or vice versa). To verify or rule this out check and see if the Asp.Net is running in 64 bit mode and if so you need to have a 64 bit version of the C DLL

like image 30
JaredPar Avatar answered Jan 20 '23 00:01

JaredPar