我有用于 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。
如果有这个异常的处理程序,程序可以安全地继续。