可能重复:
Visual C++ 托管应用程序:找不到名为“添加”的入口点</a>
我正在学习在 C# 中使用平台调用。我按照msdn上的教程进行操作:
它与 C++ 完美配合使用 MathFuncsDll.dll。
当我使用:
[DllImport("MathFuncsDll.dll")]
在我的 C# 代码中,引发了一个 dll not found 异常。然后我将其更改为:
[DllImport("C:\\...\\MathFuncsDll.dll")]
然后出现未找到入口点异常。
我该如何解决这些问题?
为澄清起见,这是我的代码:C++ dll:
头文件:
//MathFuncsDll.h
#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}
.cpp 文件:
// MathFuncsDll.cpp
// compile with: /EHsc /LD
#include "MathFuncsDll.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)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
}
这是 C# 应用程序调用函数:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace CSharpConsole
{
class Program
{
//[DllImport("MathDll.dll")]
[DllImport(@"C:\Users\...\Debug\MathDll.dll")]
public static extern double Add(double a, double b);
static void Main(string[] args)
{
double a = 6.2;
int b = 3;
Console.WriteLine(Add(a,b));
}
}
}
我为此创建了一个全新的解决方案,第一个 DllIport 行仍然不起作用。第二行给出入口点异常。