ich sag mal so:
Den Test mit den Chararrays hab ich eben gemacht.
Übergebe ich Strings so wies nun ist, dann gibt mir die Methode ein true zurück und wird erfolgreich ausgeführt wenn man von diesem Conventionsfehler und den Aspekt, dass der String von dem ich einen Pointer an die DLL Funktion übergebe nicht mehr Aufrufbar ist absieht.
Mit übergabe von Chararrays wird die Methode nicht erfolgreich ausgeführt was mich dazu bringt zu denken, dass das wohl falsch ist.
Nicht das man mich falsch versteht, mich stört das die Methode ausgeführt wird und mir sogar ein True zurück gibt, was bedeutet, dass das Passwort verschlüsselt worden ist ich aber im nachhinein nicht mehr auf den String zugreifen kann, der ja verändert wurde durch die DLL Funktion.
Man sieht das gut am Anhang "Fehler.jpg": Das passiert unmittelbar nach ausführen des Programms, dieser Fehler tritt quasi in der DLL Funktion auf.
Wenn ich den Conventionsfehler ignoriere ich habe ich dann, wenn man der Console folgt iwie nen erfolgreichen Aufruf der Methode. (Fehler2.jpg)
Grundlegend hab ich einen String, auf den ich einen Pointer gesetzt habe, den ich an die Funktion übergebe.
Dieser String (nicht der Pointer) ist nach Aufruf der Funktion nicht mehr aufrufbar. Da ich nicht weiss was die Funktion wirklich macht und es keine Doku gibt hab ich keine Ahnung warum das so ist.
Mein Programm ist zur Zeit in C++ und so wies aussieht findet die DLL Funktion wohl diese C++ Strings *******e. Daher vllt der Conventionsfehler.
Jedoch wüsste ich nicht was sich bei der Verwendung von C Strings ändern sollte.
Um auf die Frage der anderen Daten zu antworten: Ich hab nur die DLL und leider gottes NICHTS anderes, bzw. noch den Aufruf dieser Funktion aus einem Centuraprogramm, was mir aber nicht weiterhilft.
Zur Übersicht aktueller Code:
// CtoAvpass32DLL.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include "shlobj.h"
#include <cstdlib>
#include <iostream>
#include <string>
// name of the DLL to be loaded
#define IPS_ENCRYPT "avpass32.dll" // <- .dll nicht vergessen
using namespace std;
int main(int argc, char* argv[])
{
HINSTANCE hLib = NULL;
hLib = LoadLibrary(IPS_ENCRYPT);
if(hLib == NULL){
cout << "DLL konnte nicht geladen werden\n";
}
else {
cout << "DLL geladen\n";
}
typedef bool (*pIpsEncrypt)( string *, string *, int );
pIpsEncrypt function = reinterpret_cast< pIpsEncrypt >( GetProcAddress( hLib, "IpsEncrypt" ) );
if( function != NULL )
{
cout << "Funktion gefunden\n";
string s1 = "";
string s2 = "";
string * p1 = &s1;
string * p2 = &s2;
int n1 = 8;
try {
if(function(p1, p2, n1) == 1) {
cout << "Verschlüsselung erfolgreich!" << endl;
cout << s2; //FUNTIONIERT NICHT
}
}
catch (...) {
cout << "Catchbereich!" << endl;
}
}
return EXIT_SUCCESS;
}