Veröffentlicht 2. September 200817 j 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
2. September 200817 j 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?
2. September 200817 j 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 200817 j von sYnest
2. September 200817 j 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?
2. September 200817 j 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 ?
2. September 200817 j 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.
2. September 200817 j 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.
2. September 200817 j 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:
2. September 200817 j Versuch das bitte mal: typedef bool (__stdcall *pIpsEncrypt )( char *, char *, int ); [/code]
2. September 200817 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.