0 registered members (),
984
guests, and 5
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Konvertierung C-Script -> DLL
#167627
11/15/07 19:45
11/15/07 19:45
|
Joined: Oct 2002
Posts: 4,753 Munich, Bavaria, South of Germ...
TripleX
OP
Expert
|
OP
Expert
Joined: Oct 2002
Posts: 4,753
Munich, Bavaria, South of Germ...
|
Hallo, Ich konvertiere gerade auf ihren Rat zur kompletten "Vollendung" von GameEdit, das Projekt größtenteils in eine DLL (zumindest mindestens 75% des Codes). Hierbei stoße ich öfter auf Probleme wobei ich jetzt hier 6 Fragen habe wie man vll. geschickter Arbeiten kann. - Kann ich irgendwie automatisches casten von Zahlen zu _VAR aktivieren? Eine große Fehlerquelle beim Konvertieren ist im Moment, dass ich Code wie:
var GEdit_a = 0; Gedit_a += 1; spontan nicht verändere. Dabei muss ich schreiben GEdit_a += _VAR(1). Das gleiche andersrum: (txt->pstring)[GEdit_a] = chr - Dabei muss es (txt->pstring)[_INT(GEdit_a)] heißen. EDIT: Zumindest eine Warnung wie "Hier wird int zu var konvertiert" wäre nützlich. Kann man das VC++ beibringen?
- Nächstes Problem: String Funktionen akzeptieren in einer DLL nur char* als zweites Paramter. Dauerhaftes aufrufen der Funktion _chr() entfinde ich als störend im Code und sicher auch nicht als sonderlich schnell. Kann ich gefahrenlos unter jeder Funktion die in der afuncs.h definiert ist, eine zweite Funktion schreiben die 2 Strings annimmt? Beispiel:
Code:
EXT var F(str_cmpi)(STRING*,char*); EXT var F(str_cmpi)(STRING*,STRING*);
- Ich konvertiere Funktion für Funktion (nicht alles auf einmal). Daraus ergibt sich natürlich das Problem, dass Funktionen evtl. noch nicht definiert sind. So lange diese Funktionen noch nicht definiert sind löse ich es wie folgt:
Code:
#define GEdit_useroutput(a,b,c,d) engine_callname4("GEdit_useroutput",(long)a,(long)b,(long)c,(long)d) #define GEdit_update_interface2() engine_callname4("GEdit_update_interface2",(long)0,(long)0,(long)0,(long)0)
Gibt es hier intelligentere / Schönere Lösungen? Leider können C-Script Funktionspointer ja nicht in einer DLL aufgerufen werden.
- Leider kann in einer DLL kein wait benutzt werden. Wie würden sie daher Funktionen konvertieren in denen irgendwo ein wait(1) vorkommt? z.B. einfach nur ein simples: while(!mouse_left) { wait(1); } //next instructions.
gibt ja schon schwere Probleme? Evtl. so: C-Script: Code:
dllfunction name_dll(arg) function name() { name_dll(0); while(mouse_left) { wait(1); } name_dll(1); }
DLL: Code:
DLLFUNC var name_dll(var num) { if(_INT(num) ==0 ) //selbes prob. wie in 1) !!! { //erster teil der Funktion return 0; } if(_INT(num) == 1) { //zweiter teil der Funkion return _VAR(1); } return(_VAR(-1)); }
Oder gibt es auch hier eine elegantere Lösung?
- Wie schnell arbeitet engine_getobj?
- Dumme Frage vielleicht: Wie kann ich in DLL Funktionen eine DLLFUNC aufrufen? Oder ist das nicht möglich? (Nur über den umweg von engine_callname4?)
Vielen Dank für jede Hilfe, mit freundlichen Grüßen, Timo PS: Die Fragen sind eigentlich an alle gerichtet, daher wer eine Antwort weiß.. Nur her damit
|
|
|
|