메서드가있는 관리되지 않는 클래스를 포함하는 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입니다.
오류는 런타임에 발생합니다. " 'TestDLL.dll'DLL에서 '추가'라는 항목을 찾을 수 없습니다."라는 메시지가 나타납니다.
내가 뭘 잘못하고 있니? 이것에 대한 MSDN 기사를 읽었지만 이해가되지 않습니다.
미리 도움 주셔서 감사합니다.
비 관리 코드가 네임 스페이스에있는 클래스에 있지만 관리되는 C++ 코드에 주변 네임 스페이스가 없습니다. DLL에'MathFuncs :: MyMathFuncs :: Add'가있는 동안 관리되는 코드가'MyMathFuncs :: Add'를 찾는 것이 문제 일 수 있습니다. –
왜 P/invoke를 사용합니까? C++/CLI의 멋진 기능 중 하나는 P/invoke없이 네이티브 DLL에 연결할 수 있다는 것입니다. –