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