我需要在我的项目中使用密码学(visual c++ 2008 sp1,带有几个 dll 的 exe,使用一些第三方库)。我选择了 Crypto++ 库。我将它用作静态库。首先,我在测试控制台应用程序中测试了我需要的所有功能,一切正常。
然后我开始将这个功能集成到项目中。
它在许多 Crypto++ 函数调用上崩溃,包括像这样非常简单的函数调用:
CryptoPP::FileSource file("publicKeySign.der", true);
在调用这行代码期间,应用程序崩溃:
Unhandled exception at 0x00c56619 in Starter.exe: 0xC0000005: Access violation reading location 0x00006f70.
这是我的调用堆栈:
Starter.exe!CryptoPP::member_ptr<CryptoPP::AlgorithmParametersBase>::reset(CryptoPP::AlgorithmParametersBase * p=0x00000000) Line 50 + 0x9 bytes C++
Starter.exe!CryptoPP::AlgorithmParameters::operator()<char const *>(const char * name=0x00d8ec04, const char * const & value=0x00d88a44, bool throwIfNotUsed=true) Line 356 C++
Starter.exe!CryptoPP::MakeParameters<char const *>(const char * name=0x00d8ec04, const char * const & value=0x00d88a44, bool throwIfNotUsed=true) Line 388 + 0x2d bytes C++
Starter.exe!CryptoPP::FileSource::FileSource(const char * filename=0x00d88a44, bool pumpAll=true, CryptoPP::BufferedTransformation * attachment=0x00000000, bool binary=true) Line 65 + 0x6d bytes C++
Starter.exe!PDD::PDDApp2::Open() Line 237 C++
Starter.exe!WinMain(HINSTANCE__ * __formal=0x00c50000, HINSTANCE__ * __formal=0x00c50000, HINSTANCE__ * __formal=0x00c50000, HINSTANCE__ * __formal=0x00c50000) Line 387 + 0xb bytes C++
Starter.exe!__tmainCRTStartup() Line 578 + 0x1d bytes C
kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes
ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
我的项目和 Crypto++ 都使用多线程 DLL 运行时库。
我尝试将 Crypto++ 项目选项更改为与我的项目选项相同,但这没有帮助(在某些更改后应用程序因另一个调用堆栈而崩溃)。
任何想法将不胜感激!