Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Speicheradressierungsfehler ?

Empfohlene Antworten

Veröffentlicht

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

post-51116-14430448050808_thumb.jpg

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?

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 von sYnest

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?

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 ?

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

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.

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:

post-51116-14430448051234_thumb.jpg

post-51116-14430448051696_thumb.jpg

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.