静态C ++库链接到C#代码

时间:2016-08-16 17:05:59

标签: c# c++ dll static-libraries

我正在尝试将C ++库链接到C#代码。我在这个链接中找到了这个非常好的解释:https://social.msdn.microsoft.com/Forums/vstudio/en-US/299da822-5539-4e5b-9ba7-b614e564c9f4/presenting-a-c-library-lib-for-use-in-c-project?forum=vcgeneral

所以我试着在这里重现它:

我的标题:

// Static Library's Header: MathFuncsLib.h

namespace MathFuncs
{
    class MyMathFuncs
    {
    public:
        // Returns a + b
        static double Add(double a, double b);

        // Returns a - b
        static double Subtract(double a, double b);

        // Returns a * b
        static double Multiply(double a, double b);

        // Returns a / b
        static double Divide(double a, double b);
    };
}

我的C ++源代码是:

/* MathFuncsLib.cpp
   compile with: cl /c /EHsc MathFuncsLib.cpp
   post-build command: lib MathFuncsLib.obj

    This example comes from MSDN  
*/

#include "MathFuncsLib.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
    double MyMathFuncs::Add(double a, double b)
    {
        return a + b;
    }

    double MyMathFuncs::Subtract(double a, double b)
    {
        return a - b;
    }

    double MyMathFuncs::Multiply(double a, double b)
    {
        return a * b;
    }

    double MyMathFuncs::Divide(double a, double b)
    {
        return a / b;
    }
}

最后,我想要使用C ++库的C#代码是:

using System;
using System.Runtime.InteropServices;

namespace TestCppLibrary
{
    public class Program
    {
        [DllImport("MathFuncsLib.dll.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern double Add(double a, double b);

        static void Main(string[] args)
        {
            double a = 7.4;
            double b = 99.3;
            double res = Add(a, b);
            Console.WriteLine("The sum is : " + res.ToString());
            Console.ReadLine();
        }
    }
}

我收到此错误:

  

{“无法加载DLL'MathFuncsLib.dll':指定的模块   无法找到。 (HRESULT异常:0x8007007E)“}

我已经花了两天时间搜索解决方案,但我找不到有用的答案。

我想我需要将我的库定义为COM。如果是这样,怎么办?无论如何,在这种情况下如何将我的库链接到C#代码?

谢谢

Henrique的

0 个答案:

没有答案