sYnest Geschrieben 2. September 2008 Geschrieben 2. September 2008 Folgendes Problem: Ich habe eine DLL eingebunden, die eine Funktion enthält von der ich weder Dokumentation hab noch weiss ich wie sie arbeitet, jedoch weiss ich, dass sie funktioniert. Sie nennt sich: IpsEncrypt. Die DLL is vor zich Jahren mal gekauft worden für Passwortverschlüsselung in gewissen Bereichen bei uns. Erklärung der Funktion: IpsEncrypt: Passwort verschlüsselung Parameter: char*, char *, int Der erste Parameter ist das normale Passwort, der Zweite das verschlüsselte (wird also in der Funktion beschrieben) und der int ist die Länge des verschlüsselten Passworts. Lange rede kurzer sinn, mein Code: JNIEXPORT jstring JNICALL Java_database_Crypt_IpsEncrypt (JNIEnv * env, jobject obj, jstring name) { HINSTANCE hLib = NULL; hLib = LoadLibrary(IPS_ENCRYPT); typedef bool (*pIpsEncrypt)( char *, char *, int ); pIpsEncrypt function = reinterpret_cast< pIpsEncrypt >( GetProcAddress( hLib, "IpsEncrypt" ) ); if(hLib != NULL){ if( function != NULL ) { char s1[100]; char s2[100]; strcpy(s1, env->GetStringUTFChars(name, false)); int n1 = 8; function(s1, s2, n1); printf("Passwort Enc aus C++: "); printf(s2); return env->NewStringUTF( s2 ); } } printf("Null returned"); return NULL; }[/PHP] Es entstehen, so Vermutungen, Speicheradressierungsfehler beim Freigeben der beiden Chararrays s1,s2 während dem Schliessen des Programms und dadurch wird der Fehler erzeugt, aber wissen tu ich das nicht. Die Fehlermeldung die entsteht (Fehler4.jpg) tritt 2 mal auf einmal vor Aufruf der Funktion und einmal nachher. Vielleicht gibt es wen, der eine Idee hat, wie ich diese Fehlermeldungen im warsten Sinne des Wortes ausblenden oder verschwinden lassen kann. Durch ignorieren der Fehlermeldungen läuft schließlich mein Programm korrekt weiter und das Passwort wird korrekt verschlüsselt ausgegeben. Danke Zitieren
TDM Geschrieben 2. September 2008 Geschrieben 2. September 2008 hmm, nach langem googlen hab ich jetzt paar Ideen: Re: chkesp.c line 42 runtime error? Da wird gemeint, dass es mit unterschiedlichen Headern erzeugt wurde und man beides neu kompilieren soll, aber das geht ja bei dir nicht. Debug : File :i386\chkesp.c ERROR - C / C++ Forum Da bin ich auf die Idee gekommen, dass es am Funktionsnamen liegen könnte. (Ich hatte vorriges Jahr ein ähnliches Problem) Schau am Besten mal mit dem Depency Walker nach, ob die Funktion immernoch so heißt. bzw. hast du ein .DEF-File zu der DLL? Zitieren
sYnest Geschrieben 2. September 2008 Autor Geschrieben 2. September 2008 (bearbeitet) Zu der DLL gibt es nichts, echt nichts. Nur die DLL. Der Funktionsname is richtig, du meinst doch den Namen der Funktion in der DLL? Ich habe ein Centura Programm hier liegen, das die Funktion genau so verwendet. Ich hab mir mal deinen Link von deinem Problem angeschaut. Meinst du es liegt an meiner Funktionsdefinition ? Bearbeitet 2. September 2008 von sYnest Zitieren
TDM Geschrieben 2. September 2008 Geschrieben 2. September 2008 Ich hab mir mal deinen Link von deinem Problem angeschaut. Meinst du es liegt an meiner Funktionsdefinition ? Hmm, könnte sein, aber bei meinem Problem, hab ich ja nur die DLL anders exportiert. Dennoch würd ich nicht typdef nehmen. Der Funktionsname is richtig, du meinst doch den Namen der Funktion in der DLL? Ja, mein ich. Hast du nachgeschaut, dass der Name nicht erweitert wurde und die Rückgabe-/Parametertypen stimmen? Zitieren
sYnest Geschrieben 2. September 2008 Autor Geschrieben 2. September 2008 Aber wenn meine Funktion doch läuft und das richtige Erzielt kann das mit dem falschen Namen doch schon garnicht mehr der Fall sein oder ? Zitieren
TDM Geschrieben 2. September 2008 Geschrieben 2. September 2008 Nuja, ich versuch ja nur alles auszuschließen. ;for the function is a C-string and it will never be equal to the ;C++ mangled name for the function Schau einfach nach, wenns das auch nicht ist, dann können wir ja weiterrätseln. Zitieren
sYnest Geschrieben 2. September 2008 Autor Geschrieben 2. September 2008 Gut mach ich. Mein IDE-Rechner müsst gleich frei werden (hat wohl irgendwer gesperrt als ich essen war :/). Dann lass ich den walker mal laufen. Meld mich dann wieder. Zitieren
sYnest Geschrieben 2. September 2008 Autor Geschrieben 2. September 2008 Hab mit dem DW mal meine beiden DLL's eingelesen. Kenn das Ding nicht also hab ich mal das gescreened was er macht wenn ich die DLL's einlese: Zitieren
Klotzkopp Geschrieben 2. September 2008 Geschrieben 2. September 2008 Versuch das bitte mal: typedef bool (__stdcall *pIpsEncrypt )( char *, char *, int ); [/code] Zitieren
sYnest Geschrieben 2. September 2008 Autor Geschrieben 2. September 2008 Ey, das war ne gute Idee scheint nun einwandfrei zu funktionieren. Vielen, vielen Dank an alle aus diesem Thread und dem Thread Java -> Bestehende DLL einbinden Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.