2016-04-18 16 views
1

ich versuche, eine C++ DLL zu schreiben, die openSSL verwendet, um eine Verbindung zu einem Server zu sichern.OpenSSL in einer VisualC++ DLL

ich durch die Tatsache, echt verwirrt bin, dass dieser Code

#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); 

in einer Konsolenanwendung funktioniert gut, aber Abstürze in meiner DLL. Hier ist meine Ausnahme:

Ausnahme bei 0x00007FF865207DA0 geworfen (libeay32.dll) in TestsForPKCSDLL.exe: 0xC0000005: Zugriffsverletzung Leseort 0x0000000000000000.

Vielen Dank für Ihre Zeit.

+0

Was sagt Ihnen der Debugger? –

+2

Eine AccessViolation beim Zugriff auf eine Adresse bei/nahe 0 bedeutet, dass auf einen Nullzeiger zugegriffen wird. Suchen Sie den NULL-Zeiger in Ihrem Code und beheben Sie ihn. Der wahrscheinlichste Täter ist der 'ssl'-Zeiger oder ein' SSL_CTX' oder 'BIO', mit dem er verknüpft ist. –

+0

Was genau ist die Frage (außer Sie sind verwirrt)? – jww

Antwort

0

Nach ein wenig Forschung scheint es, als ob das Problem von der Htonl() - Funktion kommt.

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

Ausnahme bei 0x00007FF863807DA0 (libeay32.dll) in TestsForPKCSDLL.exe geworfen: 0xC0000005: Zugriffsverletzung Leseort 0x0000000000000000.

Welche anscheinend nicht richtig geladen ist. Ich denke, da mein Code in einer DLL ist, stürzt er ab, wenn das aufrufende Programm nicht auf SSL-DLLs verweist. Ich werde versuchen, Libeay32 und ssleay32 statisch zu sehen, ob das funktioniert.