メソッドを持つアンマネージクラスを含む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」で「追加」というエントリポイントを見つけることができません。
私は間違っていますか?私はこれについてのMSDNの記事を読んだが、私はそれを理解していない。
ご協力いただきありがとうございます。
アンマネージコードはネームスペースにあるクラスにありますが、管理されたC++コードには、周囲のネームスペースがありません。 DLLに 'MathFuncs :: MyMathFuncs :: Add'が含まれているときにマネージコードが' MyMathFuncs :: Add'を探すのは問題になるかもしれません。 –
なぜこれからP/invokeを使用しますか? C++/CLIの優れた機能の1つは、P/invokeなしでネイティブDLLにリンクできることです。 –