我有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()中得到的异常消息(在最后一行的向量赋值向量中调用)方法说:
&gt; vstest.executionengine.exe中的0x000007fefdaa940d(KernelBase.dll)的第一次机会异常:Microsoft C ++异常:&gt; Microsoft :: VisualStudio :: CppUnitTestFramework :: CSEException在内存位置0x1d26baf0。
如果存在此异常的处理程序,则可以安全地继续该程序。