【1】warning C4150: 删除指向不完整“ssl_ctx_st”类型的指针;没有调用析构函数
SSL_CTX *ctx;
SSL *ssl;
delete ssl;
delete ctx;
ctx 和 ssl 是不能直接用delete释放内存的,析构函数对调用的类是不可见的,必须以如下方式释放内存:
SSL_shutdown(ssl);
SSL_free(ssl);
SSL_CTX_free(ctx);
【2】warning C4251: “CSSLPort::m_clsSSLVec”: class“std::vector<_Ty>”需要有 dll 接口由 class "CSSLPort"的客户端使用
std::vector<CSSLPortMeta *> *m_pclsSSLVec;其中class CSSLPortMeta 定义如下:
.h
class COMMUNICATION_API CSSLPortMeta
{
public:SOCKET m_hSocket;SSL *m_pSSL;public:CSSLPortMeta(void);virtual ~CSSLPortMeta(void);void SetData(SOCKET socket, SSL *ssl);
};.cpp
CSSLPortMeta::CSSLPortMeta(void)
{m_pSSL = NULL;
} CSSLPortMeta:: ~CSSLPortMeta(void)
{if(m_pSSL!=NULL){SSL_shutdown(m_pSSL);SSL_free(m_pSSL);}
}void CSSLPortMeta::SetData(SOCKET socket, SSL *ssl)
{m_hSocket = socket;m_pSSL = ssl;
}
1、第一种: 无视它或者#pragma warnind( disable: 4251 );
2、第二种:改成指针类型
std::vector<CSSLPortMeta *> *m_pclsSSLVec;初始化:
m_pclsSSLVec = new std::vector<CSSLPortMeta *>;释放内存:
size_t nCount = m_pclsSSLVec->size();
for(size_t i=0; i<nCount; i++)
{CSSLPortMeta *pData = (*m_pclsSSLVec)[i];if(pData!=NULL)delete pData;
}m_pclsSSLVec->clear();
delete m_pclsSSLVec;
【3】自己写的dll想要引入OpenSSL,出现报错:无法识别#include <OpenSSL/ssl.h>
新建一个Win32应用程序OpenSSL,应用程序类型选择DLL,点击完成。将所有需要的OpenSSL相关头文件导入,然后给自己写的dll添加项目依赖项OpenSSL, 代码的前面添加#pragma comment(lib, "OpenSSL.lib"),然后如我的第一篇文章所写的那样导入相关lib文件和dll文件即可。