0

我有用于 C# 代码的 C++ 库。当它为 Win32 构建时,它似乎没问题,但后来我为 x64 构建它,一些奇怪的事情开始发生。可能与平台无关,但我不知道为什么会这样。

所以这是下面的示例,它是我的代码的简化副本,在 x64 的控制台应用程序中完美运行,但不在我的库中。我的库的特点:它使用静态链接的cryptopp库,我自己为x64构建它并使用runtime library = 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() (在将向量分配给最后一行向量的时刻调用)方法中收到的异常消息说:

>vstest.executionengine.exe 中 0x000007fefdaa940d (KernelBase.dll) 处的第一次机会异常:Microsoft C++ 异常:>Microsoft::VisualStudio::CppUnitTestFramework::CSEException 在内存位置 0x1d26baf0。

如果有这个异常的处理程序,程序可以安全地继续。

4

0 回答 0