Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Visual Basic 6.0 / VBA » Dll Arbeitet nur wenn Debug Compiliert wurde

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.11.2003, 17:57 Uhr
AreaScout



Hi Leute

Bin neu hier und möchte euch auch gleich alle begrüssen

Ich habe ein kleines RSA beispiel programmiert unter VB, um aber den RSA teil nutzen zu können muss ich die Rechenarbeit schon von VC++ erledigen lassen, also gleich mal die OpenSSL sourcecode in ein neues VC++ dll project reingestöpselt und läuft gut, aber nur bei der Debug version, die Release version hängt sich immer auf und ich weis echt nicht mehr warum !!???

Also hier mal meine Funktion in VC++:

C++:
unsigned char * __stdcall RSAEncrypt(unsigned char *Data,unsigned char *key_e,unsigned char *key_n) {

  BIGNUM *e1 = 0;
  BIGNUM *n1 = 0;
  BIGNUM *emm = 0;
  BIGNUM *r = BN_new();
  BN_CTX *temp = BN_CTX_new();
  
  BN_hex2bn(&emm,Data);
  BN_hex2bn(&e1,key_e);
  BN_hex2bn(&n1,key_n);
  
  BN_mod_exp(r, emm, e1, n1, temp);
    
  ar = BN_bn2hex(r);
  
  BN_free(emm); emm = 0;
  BN_free(e1); e1 = 0;
  BN_free(n1); n1 = 0;
  
  BN_free(r); BN_new();
  BN_CTX_free(temp); BN_CTX_new();

  return ar;

}



Die funtion arbeitet einwandfrei der fehler muss irrgendwo bei der übergabe von ar zum stackanfang sein.
Die def datei sieht so aus:

LIBRARY "RSA_DLL"

EXPORTS
RSAEncrypt

Um den einstiegspunkt zu deklarieren

In VB sieht der call so aus :

Visual Basic:
Private Declare Function RSAEncrypt Lib "RSA_DLL.DLL" (ByVal Data As String, ByVal e As String, ByVal n As String) As String



und der aufruf so:

Result = RSAEncrypt(Mess2, e, n)

Kann mir hier bitte wer helfen oder eine vermutung anbringen wo den hier der fehler liegen könnte ?

Ich benutze VC++ 6.0 und VB 6.0


Gruß

Und hier noch mal in VB der DLL aufruf

--edit: Pablo. [ cpp ] tags gesetzt --

Dieser Post wurde am 15.11.2003 um 18:46 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.11.2003, 18:51 Uhr
Pablo
Supertux
(Operator)


Ich frage mich nur wo du ar deklarierst hast? ist eine globale Variable oder was ist sie denn?

Ich glaube, du solltest lieber im MFC Forum fragen, wie man DLLs am besten schreibt, weil das wenig mit VB zu tun hat. Schließlich ist kein VB Problem, sondern ein DLL Problem von VC++.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.11.2003, 19:19 Uhr
AreaScout




C++:
unsigned char * __stdcall RSAEncrypt(unsigned char *Data,unsigned char *key_e,unsigned char *key_n) {

  BIGNUM *e1 = 0;
  BIGNUM *n1 = 0;
  BIGNUM *emm = 0;
  BIGNUM *r = BN_new();
  BN_CTX *temp = BN_CTX_new();
  
  BN_hex2bn(&emm,Data);
  BN_hex2bn(&e1,key_e);
  BN_hex2bn(&n1,key_n);
  
  BN_mod_exp(r, emm, e1, n1, temp);
    
  ar = BN_bn2hex(r);
  strcpy(Data,ar);
  
  BN_free(emm); emm = 0;
  BN_free(e1); e1 = 0;
  BN_free(n1); n1 = 0;
  
  BN_free(r); BN_new();
  BN_CTX_free(temp); BN_CTX_new();

  return Data;

}



Hi

Ich hab mein Problem schon gelöst, wenn ich das ergebnis mit strcpy in einen in der Funktion declarierten Char schreibe funzt es ???? Komisch, muss dann wohl doch an VB und VC++ zusammenarbeit liegen

Ach ja, ar habe ich Global declariert ( unsigned char *ar ) macht aber nichts aus wenn ich sie in den stack mit rein nehme, also ist nicht das problem

Danke aber für deine rasche hilfe, wenn wer weis warum das so ist würde ich mich freuen

Gruß

--edit: Pablo [ cpp ] tags gesetzt.--

Dieser Post wurde am 15.11.2003 um 19:25 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.11.2003, 19:26 Uhr
Pablo
Supertux
(Operator)


Ich würde aber char* ar nicht als char* sondern als char[BUFFER_LENGTH], damit ersparrt sich man die Segmentation Faults mit strcpy();
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.11.2003, 20:15 Uhr
AreaScout



Hi Pablo

Danke für den Tip

Ich brenne schon darauf zu hören warum nur return ar; nicht funzt

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.11.2003, 20:22 Uhr
Pablo
Supertux
(Operator)


Ich sehe, dass du return Data; hast.
Guck mal hier:
www.fun-soft.de/showtopic.php?threadid=1958&time=1068905968

Hier erfährst du, wie du mit char*, char[], und das Returning solche Datentypen funktioniert.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.02.2005, 08:17 Uhr
cris



Hello friends, I must to do a C dll encrypt/decrypt with rsa very similar this code


Where can I find/download this full code?
I've also found another code rsa_lib but I can't find crypt.h needed:
Can you help me?

Thanks a lot of
and all the best

cris

Dieser Post wurde am 18.02.2005 um 08:22 Uhr von cris editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.03.2005, 03:38 Uhr
Audron-AT-www
http://www.sXene.de Audron@sxene.de
(Operator)


@chris:
just search on google.com for this code

Im sure you'll find it
--
Mit freundlichen Grüßen
Audron, audron@sxene.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.03.2005, 09:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok, ganz einfach, wenn "ar" eine globale Variable ist, ist sie nur in der DLL-bekannt, (warums unter Debug funzt ist seltsam, aber naja) jedenfalls will dann VB auf eine Adresse in der DLL zugreifen (wo es keine Berechtigung dazu hat) darum stürzt es dann ab. Evtl erkennt VB die Debugversion und kann dadurch auf die adresse von ar zugreifen.

Man sollte aber immer möglichst dll-vars und programm-vars trennen, also immer so wie du es dann gemacht hast das du alle "rückgaben" dann auch vorher übergeben hast.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Visual Basic 6.0 / VBA ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: