0

C# コードで使用するための C++ ライブラリがあります。Win32 用にビルドしたときは問題ないように見えましたが、x64 用にビルドすると、奇妙なことが起こり始めました。プラットフォームに関連していない可能性がありますが、なぜそれが起こっているのか、他にはわかりません。

これは私のコードの単純化されたコピーであり、x64 のコンソール アプリケーションでは完全に動作しますが、私のライブラリでは動作しません。私のライブラリの特徴: 静的にリンクされた cryptopp ライブラリを使用し、x64 用に自分でビルドし、ランタイム ライブラリ = MDd を使用しました (ただし、MTd を使用することをお勧めしましたが、試してみても効果はありませんでした)。また、私の cpp ライブラリはメソッドをエクスポートします。ランタイム ライブラリと cryptopp をリンクするためのパスを除いて、プロジェクトのプロパティを変更したことを思い出せません。

このコードは、同じソリューション内のテスト プロジェクトから呼び出され、同じ効果を持つ C# コードからも呼び出されます。また、テスト メソッドが実行される前のテスト プロジェクトの開始時に、KernelBase.dll に多くの例外があります。

// library

class SymmetricAlgorithm
{
public:
    SymmetricAlgorithm() {}
    vector<byte> Key;
    vector<byte> IV;
};

class Data 
{
public:
    Data(vector<byte> b) {_b = b;}
    vector<byte> GetBytes() {return _b;}

private:
    vector<byte> _b;
};


// test project

vector<byte> b(10, 1);
Data key = Data(b);
SymmetricAlgorithm sa;
sa.Key = key.GetBytes();

vector._Tidy() (最後の行の vector への代入 vector の瞬間に呼び出される) メソッドで取得した例外メッセージは、次のように述べています。

>vstest.executionengine.exe の 0x000007fefdaa940d (KernelBase.dll) での初回例外: Microsoft C++ 例外: >Microsoft::VisualStudio::CppUnitTestFramework::CSEException メモリ位置 0x1d26baf0 で。

この例外のハンドラがあれば、プログラムは安全に続行できます。

4

0 に答える 0