EntryPointNotFoundException when binding C++ dll in C#

后端 未结 2 1063
感情败类
感情败类 2020-12-17 19:09

I try to bind a simple c++ dll shown in http://msdn.microsoft.com/en-us/library/ms235636.aspx in my c# console app, but I get a EntryPointNotFoundException for Add within dl

2条回答
  •  天涯浪人
    2020-12-17 19:36

    You could try declaring the functions outside of a class and also exporting them with extern "C":

    Header:

    // MathFuncsDll.h
    namespace MathFuncs
    {
        // Returns a + b
        extern "C" __declspec(dllexport) double Add(double a, double b);
    
        // Returns a - b
        extern "C" __declspec(dllexport) double Subtract(double a, double b);
    
        // Returns a * b
        extern "C" __declspec(dllexport) double Multiply(double a, double b);
    
        // Returns a / b
        // Throws DivideByZeroException if b is 0
        extern "C" __declspec(dllexport) double Divide(double a, double b);
    }
    

    Implementation:

    // MyMathFuncs.cpp
    #include "MathFuncsDll.h"
    #include 
    
    using namespace std;
    
    namespace MathFuncs
    {
        double Add(double a, double b)
        {
            return a + b;
        }
    
        double Subtract(double a, double b)
        {
            return a - b;
        }
    
        double Multiply(double a, double b)
        {
            return a * b;
        }
    
        double Divide(double a, double b)
        {
            if (b == 0)
            {
                throw new invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    

    Calling code:

    namespace BindingCppDllExample
    {
        public class BindingDllClass
        {
            [DllImport("MathFuncsDll.dll")]
            public static extern double Add(double a, double b);
        }
    
        public class Program
        {
            public static void Main(string[] args)
            {
                double a = 2.3;
                double b = 3.8;
                double c = BindingDllClass.Add(a, b);
    
                Console.WriteLine(string.Format("{0} + {1} = {2}", a, b, c));
            }
        }
    }
    

提交回复
热议问题