-3

I have a C++ dll Project called “MathLibrary” and a C# asp.net Project called “WebApplication1”. I added the project “MathLibrary” into “WebApplication1” and then I added a reference to MathLibrary.dll (as showed in the figure). But I am not able to call the functions from MathLibrary.dll. I though I had to add “using MathLibrary” at the top of the .cs file, but the name is not recognized. How to call the functions from from MathLibrary.dll?

WebApplication1

MathLibrary.h

dmiranda
  • 3
  • 5

1 Answers1

1

Managed

If MathLibrary.dll is a .NET assembly, you can resolve the issue as follows:

  • In solution explorer (on the right), locate "WebApplication1" and right click the "references" node.
  • Choose "Add reference" then "Projects" (on the left) then "MathLibrary.dll".

Unmanaged

However, from appearances, MathLibrary.dll is NOT a .NET assembly. It appears to be a standard Win32 DLL (I can tell from the use of declspec(dllexport)), meaning that it contains unmanaged code and a series of symbols and entry points (as opposed to a .NET assembly DLL, which exposes types). If that is the case, setting a reference won't help. A special procedure is needed to use the DLL, since it is unmanaged.

To learn about consuming ummanaged DLLs from .NET, see this article.

The important bit is:

Use the DllImportAttribute to identify the DLL and function. Mark the method with the static and extern modifiers.

Your C# code might look like this:

namespace WebApplication1
{
    class ExternalFunctions
    {
        [DllImport("MathLibrary.dll")]
        public static extern bool fibonacci_next();
    }

    class Program
    {
        static void Main()
        {
            //call it
            var foo = ExternalFunctions.fibonacci_next();
        }
    }
}

If you have trouble with the above, you may need to modify the way that MathLibrary.dll exports its symbols (you must use extern "C").

See also How does Extern work in C#?.

John Wu
  • 50,556
  • 8
  • 44
  • 80
  • It is already done. From the picture, you can see that "MathLibrary" is already in the referece list of "WebApplication1". That is my point, even doing that, I still can not call the functions from "MathLibrary" ... Why? – dmiranda Feb 16 '18 at 20:54
  • I've revised my answer based on the additional information in your question. – John Wu Feb 16 '18 at 21:23