2016-04-18 74 views
1

我想寫一個C++ DLL,它使用openSSL來保護到服務器的連接。在VisualC++ DLL中的OpenSSL

我genuinly的事實,該代碼

#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)拋出:0000005:訪問衝突讀取位置0x0000000000000000。

非常感謝您的時間。

+0

調試器告訴你什麼? –

+2

訪問/接近0處的地址時的AccessViolation表示正在訪問NULL指針。在你的代碼中找到NULL指針並修復它。最可能的罪魁禍首是你的'ssl'指針,或者它所鏈接的'SSL_CTX'或'BIO'。 –

+0

究竟是什麼問題(除了你感到困惑之外)? – jww

回答

0

經過一番研究,看起來問題來自htonl()函數。

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

異常在0x00007FF863807DA0(的libeay32.dll)在TestsForPKCSDLL.exe拋出:0000005:訪問衝突讀取位置0x0000000000000000。

顯然沒有正確加載。我認爲,因爲我的代碼在DLL中,所以如果調用程序沒有引用SSL dll,它就會崩潰。我會嘗試鏈接libeay32和ssleay32靜態看看是否有效。