VisualC ++ DLL中的OpenSSL

时间:2016-04-18 21:50:38

标签: c++ dll openssl winsock winsock2

我正在尝试编写一个C ++ DLL,它使用openSSL来保护与服务器的连接。

我对这段代码

的事实感到困惑
#include "stdafx.h"
#include <string.h>
#include <iostream>
//SSL stuff
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/x509.h>
#include <openssl/x509_vfy.h>
#include <openssl/ossl_typ.h>
#include <openssl/applink.c>
//Winsock stuf
#pragma comment(lib, "ws2_32.lib")
{... Create a method in which we set up the SSL connection ...}
char* tSend = "{\"reqtype\":\"keyexchange\"}";
int sendSize = strlen(tSend);
int net_tSend = htonl(sendSize);
SSL_write(ssl, &net_tSend, 4);
SSL_write(ssl, tSend, sendSize);

在控制台应用程序中正常工作,但在我的DLL中崩溃。 这是我的例外:

  

TestsForPKCSDLL.exe中的0x00007FF865207DA0(libeay32.dll)抛出异常:0xC0000005:访问冲突读取位置0x0000000000000000。

非常感谢你的时间。

1 个答案:

答案 0 :(得分:0)

经过一番研究后,看起来问题来自于htonl()函数。

    u_long mylong = 10L;
    int net_tSend = htonl(mylong);
  

TestsForPKCSDLL.exe中的0x00007FF863807DA0(libeay32.dll)抛出异常:0xC0000005:访问冲突读取位置0x0000000000000000。

显然没有正确加载。我认为,因为我的代码在DLL中,如果调用程序没有引用SSL dll,它会崩溃。我会尝试静态链接libeay32和ssleay32,看看是否有效。