DLL einbinden...



  • Warum nimmst Du eigentlich so ein ellenlanges Array. Benutze in der DLL einfach einen AnsiString

    AnsiString sCodeArray = "abcdefgh...";
    

    So kannst Du Dir ne Menge Tipparbeit sparen und einfach auf jedes Element zugreifen.

    AnsiString Test = sCodeArray[1]; //liefert 'a'
    


  • Immer wenn ich versuche strcmp zu nehmen, bekomme ich vom Compilier vorgeworfen: *Cannot convert 'int' to 'const char '.
    Woran kann das denn schon wieder liegen???



  • Na, weil du wohl nen Int-Wert übergibst anstatt nem const char*.



  • Ich hab' das so gemacht, Funktioniert aber nicht:

    if (strcmp(NormalText[a], Annalyt[y])==0)
    {
     //...
    }
    

    Aber ich versteh nicht, was daran falsch ist???

    [ Dieser Beitrag wurde am 03.03.2003 um 17:46 Uhr von aaaabyx editiert. ]



  • Oh scheiße! Was hab ich für einen Mist geschrieben! Entschuldige bitte. Natürlich war deine allererste Abfrage richtig. Oh man, was ist nur heute mit mir los?! 😕 Sorry nochmal. Deine Abfrage war richtig, da du da keine char* 's vergleichst, sondern char's. Und das ist ja auch, was du wolltest. Ich schlage dir etwas vor: du strukturierst deinen Code so, dass man ihn auch gut lesen kann und ich schaue mir das dann an und versuche, die Fehlerquelle zu finden.



  • OK, das ist 'n Deal... 😉 😃 😉 😃

    @F98: Weil ich mich zwischen ' und " entscheiden muss: Eins kann ich nicht mit 'reinnehmen... Und ich entscheide mich für ". Es sei denn, du weißt 'n Weg, mit dem man beides mit reinkriegt...

    [ Dieser Beitrag wurde am 03.03.2003 um 18:04 Uhr von aaaabyx editiert. ]



  • F98 hat schon recht. Anstatt 1000 Zeilen für deinen char* AnalytInit (oder wie auch immer er heißt) zu schreiben, kannst du genauso

    char AnalytInit[] = " 0123456789ABCDEFG....";
    

    schreiben. Das ist das Gleiche!!!

    [ Dieser Beitrag wurde am 03.03.2003 um 18:10 Uhr von WebFritzi editiert. ]



  • Dann kann ich aber das " nicht verwenden, weil das Programm das als Ende des Strings ansieht... 😞 😞 😞

    Ach UND: Ich hatte es oben schon mal erwähnt: Wenn ich die Funktionen in dem Projekt, das ausgrführt wird, selbst deklariere, Funktionieren sie OHNE Fehlermeldung!!!



  • Ok, hier kommt der durchstrukturierte Code:

    //---------------------------------------------------------------------------
    #include <vcl\vcl.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    //   Wichtiger Hinweis zur DLL-Speicherverwaltung:
    //
    //   Um die Bibliothek BCBMM.LIB zu verwenden, muß diese zum DLL-Projekt und
    //   allen EXE-Projekten geladen werden. Dies gilt, falls Ihre DLL eine
    //   Funktion exportiert, die Stringobjekte (oder verschachtelte Strings in
    //   Structs/Classes) als Parameter übergibt. Dies modifiziert die DLL und deren
    //   Programme so, daß die Datei BCBMM.DLL als dessen Speichermanager verwendet
    //   wird. In diesen Fällen muß die Datei BCBMM.DLL mit Ihrer DLL weitergegeben
    //   werden.
    //
    //   Um die Verwendung der BCBMM.DLL zu vermeiden, sollten
    //   String-Parameter unter Verwendung von "char *" oder ShortString-Parameter
    //   übergeben werden.
    //---------------------------------------------------------------------------
    extern "C" __declspec(dllexport) String GetCodedText(String, String);
    extern "C" __declspec(dllexport) String GetNormalText(String, String);
    char Annalyt[103];
    //---------------------------------------------------------------------------
    USERES("Codeworks.res");
    //---------------------------------------------------------------------------
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
    {
        return 1;
    }
    //---------------------------------------------------------------------------
    //Eingabe des Zeichenfeldes
    void AnnalytInit(void)
    {
       Annalyt[1]='0';
       Annalyt[2]='1';
       Annalyt[3]='2';
       Annalyt[4]='3';
       Annalyt[5]='4';
       Annalyt[6]='5';
       Annalyt[7]='6';
       Annalyt[8]='7';
       Annalyt[9]='8';
       Annalyt[10]='9';
       Annalyt[11]='A';
       Annalyt[12]='B';
       Annalyt[13]='C';
       Annalyt[14]='D';
       Annalyt[15]='E';
       Annalyt[16]='F';
       Annalyt[17]='G';
       Annalyt[18]='H';
       Annalyt[19]='I';
       Annalyt[20]='J';
       Annalyt[21]='K';
       Annalyt[22]='L';
       Annalyt[23]='M';
       Annalyt[24]='N';
       Annalyt[25]='O';
       Annalyt[26]='P';
       Annalyt[27]='Q';
       Annalyt[28]='R';
       Annalyt[29]='S';
       Annalyt[30]='T';
       Annalyt[31]='U';
       Annalyt[32]='V';
       Annalyt[33]='W';
       Annalyt[34]='X';
       Annalyt[35]='Y';
       Annalyt[36]='Z';
       Annalyt[37]='Ä';
       Annalyt[38]='Ö';
       Annalyt[39]='Ü';
       Annalyt[40]='a';
       Annalyt[41]='b';
       Annalyt[42]='c';
       Annalyt[43]='d';
       Annalyt[44]='e';
       Annalyt[45]='f';
       Annalyt[46]='g';
       Annalyt[47]='h';
       Annalyt[48]='i';
       Annalyt[49]='j';
       Annalyt[50]='k';
       Annalyt[51]='l';
       Annalyt[52]='m';
       Annalyt[53]='n';
       Annalyt[54]='o';
       Annalyt[55]='p';
       Annalyt[56]='q';
       Annalyt[57]='r';
       Annalyt[58]='s';
       Annalyt[59]='t';
       Annalyt[60]='u';
       Annalyt[61]='v';
       Annalyt[62]='w';
       Annalyt[63]='x';
       Annalyt[64]='y';
       Annalyt[65]='z';
       Annalyt[66]='ä';
       Annalyt[67]='ö';
       Annalyt[68]='ü';
       Annalyt[69]=',';
       Annalyt[70]='.';
       Annalyt[71]=';';
       Annalyt[72]=':';
       Annalyt[73]='°';
       Annalyt[74]='!';
       Annalyt[75]='@';
       Annalyt[76]='²';
       Annalyt[77]='§';
       Annalyt[78]='³';
       Annalyt[79]='$';
       Annalyt[80]='%';
       Annalyt[81]='&';
       Annalyt[82]='/';
       Annalyt[83]='{';
       Annalyt[84]='(';
       Annalyt[85]='[';
       Annalyt[86]=')';
       Annalyt[87]=']';
       Annalyt[88]='=';
       Annalyt[89]='}';
       Annalyt[90]='ß';
       Annalyt[91]='?';
       Annalyt[92]='µ';
       Annalyt[93]='+';
       Annalyt[94]='*';
       Annalyt[95]='~';
       Annalyt[96]='#';
       Annalyt[97]='"';
       Annalyt[98]='-';
       Annalyt[99]='_';
       Annalyt[100]='<';
       Annalyt[101]='>';
       Annalyt[102]='|';
       Annalyt[103]=' ';
    }
    //Codierungsfunktion
    String GetCodedText(String NormalTextIm, String PasswordIm)
    {
        AnnalytInit();
       //Initialisieren der Texte und des Passworts
        AnsiString NormalText=NormalTextIm;
        AnsiString Password=PasswordIm;
        AnsiString CodedText="";
       //Initialisieren der Variablen zum bestimmen des Zeichens im Text/Passwort
        int a=1;
        int b=1;
       //Codierung
        while (NormalText.Length()>CodedText.Length())
        {
        //Initialisierung der benötigten Variablen
            int y=1;
            bool Done=false;
          //Erkennung des Buchstabens im Text
            while((y<=103)&&(Done==false))
            {
            if (NormalText[a]==Annalyt[y])
                    Done=true;
            else
                    y++;
            }
          //Initialisierung der benötigten Variablen
            int z=1;
            Done=false;
          //Erkennung des Buchstabens im Passwort
            while((z<=103)&&(Done==false))
          {
            if (Password[b]==Annalyt[z])
                    Done=true;
            else
                    z++;
            }
          //Berechnung des Ergebnisses
            int e=y+z;
            if (e>103)
            e=e-103;
            CodedText=CodedText+Annalyt[e];
          //Bestimmen der neuen Variablenwerte für die Bestimmung eines Buchstabens im Text/Passwort
            a++;
            if (b==Password.Length())
            b=1;
            else
            b++;
        }
       //Endergebnis
        return CodedText;
    }
    //Funktion zum Decodieren
    String GetNormalText(String NCodedTextIm, String NPasswordIm)
    {
        AnnalytInit();
       //Initialisieren der Texte und des Passworts
        AnsiString NCodedText=NCodedTextIm;
        AnsiString NPassword=NPasswordIm;
        AnsiString BackNormalText="";
       //Initialisieren der Variablen zum bestimmen des Zeichens im Text/Passwort
        int g=1;
        int f=1;
       //Decodierung
        while (NCodedText.Length()>BackNormalText.Length())
        {
          //Initialisierung der benötigten Variablen
            int z1=1;
            bool Done2=false;
          //Erkennung des Buchstabens im Text
            while ((z1<103)&&(Done2==false))
            {
            if (NCodedText[g]==Annalyt[z1])
                    Done2=true;
            else
                    z1++;
            }
          //Initialisierung der benötigten Variablen
            int z2=1;
            Done2=false;
          //Erkennung des Buchstabens im Passwort
            while ((z2<=103)&&(Done2==false))
            {
            if (NPassword[f]==Annalyt[z2])
                    Done2=true;
            else
                    z2++;
            }
          //Berechnung des Ergebnisses
            int e2=z1+103-z2;
            if (e2>103)
            e2=e2-103;
            BackNormalText=BackNormalText+Annalyt[e2];
          //Bestimmen der neuen Variablenwerte für die Bestimmung eines Buchstabens im Text/Passwort
            g++;
            if (f==NPassword.Length())
            f=1;
            else
            f++;
       }
       //Endergebnis
        return BackNormalText;
    }
    

    Ich hoffe mal das wird gleich richtig dargestellt...
    Ja, SUPI...

    Was soll denn das jetzt...

    [ Dieser Beitrag wurde am 03.03.2003 um 19:04 Uhr von aaaabyx editiert. ]



  • Öhm, jo, das sieht doch schon viel besser aus. Aber sag mal, mit welcher MessageBox gibt es jetzt ein Problem?



  • Dieses Programm verstehe wer will... Früher hab' ich immer 'ne MessageBox gekriegt(beim Debuggen), wo drinstand:UNGÜLTIGE ZEIGEROPERATION... Wie gesagt... Früher... jetzt krieg ich immer, wenn ich die Funktion aufrufe, eine Zugriffsverletzung. Beim Debuggen und, wenn ich die EXE ausführe...

    [ Dieser Beitrag wurde am 03.03.2003 um 21:55 Uhr von aaaabyx editiert. ]



  • Die EXE? Die kann aber garnicht da sein, wenn ein Fehler im Programm ist. 😕 Und in WELCHER Funktion bekommst du eine Schmutzverletzung?



  • Also, nehmen wir mal an ich starte das Projekt, das die Funktionen aus der Dll aufruft, indem ich doppelt auf die vom Compilier erzeugte .exe-Datei klicke... Dann rufe ich eine der beiden Funktionen mit einer Button-Click-Methode auf.Jetzt krieg ich eine Zugriffsverletzung, egal welche Funktion ich verwendet habe... Diese kommt aber im weiteren verlauf des Programmes nie wieder vor. Die Funktionen arbeiten korrekt.

    EDIT: Sorry, ich meinte Zugriffsverletzung...

    [ Dieser Beitrag wurde am 03.03.2003 um 22:07 Uhr von aaaabyx editiert. ]



  • Weiß das niemand?

    @WebFritzi: Bitte hilf mir weiter... 🙂 🙂 🙂



  • Hey, hat denn keiner 'ne Ahnung???



  • Ich war jetzt 2 Wochen in den Ferien, aber eine Lösung hat immer noch keiner... 😞 😞 😞 😞 😞 😞 😞 😞



  • Bitte helft mir doch mal... Ich bin ratlos. 😕 😕 😕 😕 😕 😕 😕 😕



  • Ich als Compiler:

    Fehler:
    Was ist Annalyt in der Funktion AnnalytInit??? 😕
    Sorry aber das kann ich nicht richen, dass das ein char-Arrey sein soll 😮



  • Wenn du ein Compiler bist, der sich den Deklerationsteil nciht anguckt, dann kannst du mit anderen wohl nicht mithalten... 😉 😉 😉


Anmelden zum Antworten