Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Crypto+;时库堆错误+;和带有MFC的VS2019_C++_Mfc_Visual Studio 2019_Crypto++ - Fatal编程技术网

C++ 使用Crypto+;时库堆错误+;和带有MFC的VS2019

C++ 使用Crypto+;时库堆错误+;和带有MFC的VS2019,c++,mfc,visual-studio-2019,crypto++,C++,Mfc,Visual Studio 2019,Crypto++,我必须将旧的MFC应用程序更新为Visual Studio 2019编译的最新MFC版本“v142”。我还将Crypto++更新为8.2版,并按照Crypto++的建议进行更改 但密码仍然是使用不同的C++运行库,然后是MFC应用程序:当MFC应用程序中的加密内存被分配时,我得到(C:\程序文件(x86)\微软Visual Studio \\\\\\\\\\\\\\\\\\\\VC\\Too\\MVC VC\1423.28 105\ATLMFC \Src\MFC\AFXMEM.CPP:328):

我必须将旧的MFC应用程序更新为Visual Studio 2019编译的最新MFC版本“v142”。我还将Crypto++更新为8.2版,并按照Crypto++的建议进行更改

但密码仍然是使用不同的C++运行库,然后是MFC应用程序:当MFC应用程序中的加密内存被分配时,我得到(C:\程序文件(x86)\微软Visual Studio \\\\\\\\\\\\\\\\\\\\VC\\Too\\MVC VC\1423.28 105\ATLMFC \Src\MFC\AFXMEM.CPP:328):

HEAP[CryptoPPHashApp.exe]:为RtlValidateHeap(00F00000,0125E090)指定的地址无效 CryptoPPHashApp.exe已触发断点

我用VS向导创建了一个新的对话框MFC应用程序,其中有一个输入字段、消息框和一个按钮来测试问题,看看是否有其他设置有问题。但是当代码离开
ccryptophashappdlg::OnButtonCalculate()
的范围时,我得到了与上面相同的错误

#包括“pch.h”
#包括“framework.h”
#包括“CryptoPPHashApp.h”
#包括“CryptoPPHashAppDlg.h”
#包括“afxdialogex.h”
#包括
#包括
#包括
#包括
#包括
#ifdef_调试
#定义新调试\u新
#恩迪夫
使用std::string;
使用名称空间CryptoPP;
void ccryptophashappdlg::OnButtonCalculate()
{
更新数据(真);
SHA256 SHA256;
字符串哈希{};
自动接收=新的字符串接收(散列);
自动编码器=新的六角编码器(接收器);
自动过滤器=新的哈希过滤器(sha256,编码器);
StringSource ss(m_消息,真,过滤器);
m_Hash=Hash.c_str();
更新数据(假);
}
编译Crypto++时是否需要更改其他内容

是否可以重载Crypto++正在使用的
new
/
delete
运算符


在MFC应用程序中,有任何其他的密码有DLL的密码吗?

但是,CytoTopp使用的是不同的C++运行库,然后是MFC应用程序——这可能是因为你是这样构建的(不知道它),或者你使用DLL“出盒”,而不需要重建它来使用相同的运行库。“当在Crypto++DLL中分配的内存被释放时。。。“-不要使用DLL项目。它是一个FIPS DLL,已过时。改用静态库。在Crypto++wiki上也可以看到和。听起来你在混合和匹配东西。也许您仍在使用库的旧版本而不是Crypto++8.2进行链接。或者您仍然在使用Crypto++8.2中的静态链接。如果您将项目放在GitHub上,我可以查看一些设置。@jww我看到了包装器DLL,但我尽量避免它,因为我必须重写大量代码(有些我称之为“遗留”)。@jww我不使用FIPS DLL。我只编译了项目cryptlib,它的所有配置都将选项Runtime Library设置为“Multi-threaded DLL”。
#include "pch.h"
#include "framework.h"
#include "CryptoPPHashApp.h"
#include "CryptoPPHashAppDlg.h"
#include "afxdialogex.h"

#include <dll.h>
#include <sha.h>
#include <filters.h>
#include <hex.h>

#include <string>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

using std::string;
using namespace CryptoPP;

void CCryptoPPHashAppDlg::OnButtonCalculate()
{
    UpdateData(TRUE);

    SHA256 sha256;
    string hash{};
    auto sink = new StringSink(hash);
    auto encoder = new HexEncoder(sink);
    auto filter = new HashFilter(sha256, encoder);
    StringSource ss(m_Message, true, filter);

    m_Hash = hash.c_str();
    UpdateData(FALSE);
}