我有一個包含非託管類的方法的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