我有一个包含非托管类的方法的DLL。我试图从C++/CLI中调用这些方法。C++/CLI - 调用DLL中定义的非托管函数
我的阅读让我发现P/Invoke被用来做到这一点。但是,我似乎无法找到如何使其工作。
在DLL中,下面的类定义:
//Header:
namespace MathFuncs
{
class MyMathFuncs
{
public:
static __declspec(dllexport) double Add(double a, double b);
static __declspec(dllexport) double Subtract(double a, double b);
static __declspec(dllexport) double Multiply(double a, double b);
static __declspec(dllexport) double Divide(double a, double b);
};
}
//Source:
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++/CLI代码,然后我可以在我的代码中调用一个方法声明:
class MyMathFuncs {
public:
[DllImport("TestDLL.dll")]
static double Add(double a, double b);
};
其中“TestDLL.dll”是我的DLL。
我得到的错误是在运行时。它说“无法在DLL'TestDLL.dll'中找到名为'Add'的入口点”。
我在做什么错?我已阅读了关于此的MSDN文章,但我不明白。
在此先感谢您的帮助!
非托管代码位于名称空间中的类中,但托管C++代码中没有名称空间?可能是托管代码在DLL包含“MathFuncs :: MyMathFuncs :: Add”时查找“MyMathFuncs :: Add”的问题。 – 2012-02-09 06:51:59
你为什么要用P/invoke从这个。 C++/CLI的一个很好的特性就是你可以链接到没有P/invoke的本地DLL。 – 2012-02-09 10:55:30